diff --git a/System/Chatty/Commands.hs b/System/Chatty/Commands.hs
--- a/System/Chatty/Commands.hs
+++ b/System/Chatty/Commands.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE FlexibleInstances, Safe #-}
 
 {-
   This module is part of Chatty.
diff --git a/System/Chatty/Filesystem.hs b/System/Chatty/Filesystem.hs
--- a/System/Chatty/Filesystem.hs
+++ b/System/Chatty/Filesystem.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, ExistentialQuantification, ScopedTypeVariables #-}
+{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, ExistentialQuantification, ScopedTypeVariables, Safe #-}
 {-
   This module is part of Chatty.
   Copyleft (c) 2014 Marvin Cohrs
@@ -22,6 +22,7 @@
 
 module System.Chatty.Filesystem where
 
+import Control.Applicative
 import Control.Arrow
 import Control.Monad
 import Control.Monad.State
@@ -29,7 +30,8 @@
 import Data.Chatty.Atoms
 import Data.List
 import Data.Monoid
-import qualified Data.Text.IO as T
+import qualified Data.Text.IO as TIO
+import qualified Data.Text as T
 import Text.Chatty.Printer
 import Text.Chatty.Scanner
 
@@ -84,9 +86,17 @@
 instance Functor f => Functor (FilePrinterT f) where
   fmap f a = FilePrinter $ fmap f . runFilePrinterT a
 
+instance (Functor m, Monad m) => Applicative (FilePrinterT m) where
+  (<*>) = ap
+  pure = return
+
 instance Functor f => Functor (FileScannerT f) where
   fmap f a = FileScanner $ fmap f . runFileScannerT a
 
+instance (Functor m, Monad m) => Applicative (FileScannerT m) where
+  (<*>) = ap
+  pure = return
+
 instance MonadTrans FilePrinterT where
   lift m = FilePrinter $ \_ -> m
 
@@ -121,6 +131,10 @@
 
 instance Functor f => Functor (NullFsT f) where
   fmap f a = NullFs $ \p ms -> fmap (\(a,p,ms) -> (f a,p,ms)) $ runNullFsT a p ms
+
+instance (Functor m, Monad m) => Applicative (NullFsT m) where
+  (<*>) = ap
+  pure = return
   
 instance MonadTrans NullFsT where
   lift m = NullFs $ \p ms -> do a <- m; return (a,p,ms)
@@ -228,6 +242,23 @@
         sv = do
           fi <- getAtom fa
           mprint (reverse (leftBehind fi) ++ rightPending fi)
+          return $ FSSucc ()
+    putAtom fa $ File ld sv "" ""
+    return $ FSSucc fa
+
+iomapfs :: (MonadIO m,ChAtoms m) => String -> m (Mountpoint m)
+iomapfs fp = do
+  a <- newAtom
+  putAtom a ()
+  return $ Mount [] a (MultiPath []) $ \p _ -> do
+    fa <- newAtom
+    let ld = do
+          tx <- liftIO $ TIO.readFile fp
+          putAtom fa (File ld sv "" (T.unpack tx))
+          return $ FSSucc ()
+        sv = do
+          f <- getAtom fa
+          liftIO $ TIO.writeFile fp $ T.pack (reverse (leftBehind f)++rightPending f)
           return $ FSSucc ()
     putAtom fa $ File ld sv "" ""
     return $ FSSucc fa
diff --git a/System/Chatty/Misc.hs b/System/Chatty/Misc.hs
--- a/System/Chatty/Misc.hs
+++ b/System/Chatty/Misc.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE Safe #-}
+
 {-
   This module is part of Chatty.
   Copyleft (c) 2014 Marvin Cohrs
diff --git a/System/Chatty/Spawn.hs b/System/Chatty/Spawn.hs
--- a/System/Chatty/Spawn.hs
+++ b/System/Chatty/Spawn.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE Safe #-}
+
 {-
   This module is part of Chatty.
   Copyleft (c) 2014 Marvin Cohrs
@@ -25,6 +27,8 @@
 import Text.Chatty.Finalizer
 import Text.Chatty.Printer
 import Text.Chatty.Scanner
+import Control.Applicative
+import Control.Monad
 import Control.Monad.IO.Class
 import System.Exit
 import System.IO
diff --git a/System/Chatty/Spawn/Builtins.hs b/System/Chatty/Spawn/Builtins.hs
--- a/System/Chatty/Spawn/Builtins.hs
+++ b/System/Chatty/Spawn/Builtins.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE Safe #-}
+
 {-
   This module is part of Chatty.
   Copyleft (c) 2014 Marvin Cohrs
diff --git a/System/Chatty/Spawn/Overlay.hs b/System/Chatty/Spawn/Overlay.hs
--- a/System/Chatty/Spawn/Overlay.hs
+++ b/System/Chatty/Spawn/Overlay.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE Safe #-}
+
 {-
   This module is part of Chatty.
   Copyleft (c) 2014 Marvin Cohrs
@@ -23,6 +25,8 @@
 module System.Chatty.Spawn.Overlay where
 
 import System.Chatty.Spawn
+import Control.Applicative
+import Control.Monad
 import Control.Monad.Trans.Class
 import Control.Monad.IO.Class
 import System.IO
@@ -42,6 +46,10 @@
 
 instance Monad m => Functor (SpawnOverlayT m) where
   fmap f a = SpawnOverlay $ \s -> do (a',s') <- runSpawnOverlayT a s; return (f a',s')
+
+instance Monad m => Applicative (SpawnOverlayT m) where
+  (<*>) = ap
+  pure = return
 
 instance ChSpawn m => ChSpawn (SpawnOverlayT m) where
   mspw pn as (Right si) = SpawnOverlay $ \s ->
diff --git a/Text/Chatty/Channel/Broadcast.hs b/Text/Chatty/Channel/Broadcast.hs
--- a/Text/Chatty/Channel/Broadcast.hs
+++ b/Text/Chatty/Channel/Broadcast.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances #-}
+{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances, Safe #-}
 {-
   This module is part of Chatty.
   Copyleft (c) 2014 Marvin Cohrs
diff --git a/Text/Chatty/Channel/Printer.hs b/Text/Chatty/Channel/Printer.hs
--- a/Text/Chatty/Channel/Printer.hs
+++ b/Text/Chatty/Channel/Printer.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances #-}
+{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances, Safe #-}
 {-
   This module is part of Chatty.
   Copyleft (c) 2014 Marvin Cohrs
@@ -35,6 +35,7 @@
   JoinerT (..)
   ) where
 
+import Control.Applicative
 import Control.Arrow
 import Control.Monad
 import Control.Monad.IO.Class
@@ -73,6 +74,10 @@
 instance Monad m => Functor (ArchiverT c m) where
   fmap f a = liftM f a
 
+instance Monad m => Applicative (ArchiverT c m) where
+  (<*>) = ap
+  pure = return
+
 withAssoc :: Eq b => b -> a -> (a -> a) -> [(b,a)] -> [(b,a)]
 withAssoc k n f [] = [(k,f n)]
 withAssoc k n f ((p,a):ps)
@@ -114,6 +119,10 @@
 instance Monad m => Functor (FilterT c m) where
   fmap f a = liftM f a
 
+instance Monad m => Applicative (FilterT c m) where
+  pure = return
+  (<*>) = ap
+
 instance (Eq c,ChPrinter m) => ChPrinter (FilterT c m) where
   mprint str = Filter $ \(c,c1:cx) -> if c == c1 then mprint str >> return ((),c1:cx) else return ((),c1:cx)
   mnomask str = Filter $ \(c,c1:cx) -> if c == c1 then mnomask str >> return ((),c1:cx) else return ((),c1:cx)
@@ -146,6 +155,10 @@
 
 instance Functor m => Functor (JoinerT m) where
   fmap f (Joiner j) = Joiner $ fmap f j
+
+instance (Functor m, Monad m) => Applicative (JoinerT m) where
+  (<*>) = ap
+  pure = return
 
 instance ChPrinter m => ChPrinter (JoinerT m) where
   mprint = lift . mprint
diff --git a/Text/Chatty/Expansion.hs b/Text/Chatty/Expansion.hs
--- a/Text/Chatty/Expansion.hs
+++ b/Text/Chatty/Expansion.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE Safe #-}
+
 {-
   This module is part of Chatty.
   Copyleft (c) 2014 Marvin Cohrs
@@ -22,6 +24,7 @@
 -- | Provides generic string expansion
 module Text.Chatty.Expansion where
 
+import Control.Applicative
 import Control.Monad
 import Control.Monad.IO.Class
 import Control.Monad.Trans.Class
@@ -42,6 +45,10 @@
 
 instance Functor m => Functor (NullExpanderT m) where
   fmap f (NullExpander ne) = NullExpander $ fmap f ne
+
+instance (Functor m, Monad m) => Applicative (NullExpanderT m) where
+  (<*>) = ap
+  pure = return
 
 instance MonadIO m => MonadIO (NullExpanderT m) where
   liftIO = lift . liftIO
diff --git a/Text/Chatty/Expansion/History.hs b/Text/Chatty/Expansion/History.hs
--- a/Text/Chatty/Expansion/History.hs
+++ b/Text/Chatty/Expansion/History.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE Safe #-}
+
 {-
   This module is part of Chatty.
   Copyleft (c) 2014 Marvin Cohrs
@@ -22,6 +24,7 @@
 module Text.Chatty.Expansion.History where
 
 import Prelude hiding (id,(.))
+import Control.Applicative
 import Control.Arrow
 import Control.Category (id,(.))
 import Control.Monad
@@ -45,6 +48,10 @@
 
 instance Monad m => Functor (HistoryT m) where
   fmap f a = History $ \s -> do (a',s') <- runHistoryT a s; return (f a',s')
+
+instance Monad m => Applicative (HistoryT m) where
+  (<*>) = ap
+  pure = return
 
 class Monad he => ChHistoryEnv he where
   mcounth :: he Int
diff --git a/Text/Chatty/Expansion/Vars.hs b/Text/Chatty/Expansion/Vars.hs
--- a/Text/Chatty/Expansion/Vars.hs
+++ b/Text/Chatty/Expansion/Vars.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE ExistentialQuantification, RankNTypes, Rank2Types #-}
+{-# LANGUAGE ExistentialQuantification, RankNTypes, Rank2Types, Safe #-}
 
 {-
   This module is part of Chatty.
@@ -23,6 +23,7 @@
 
 module Text.Chatty.Expansion.Vars where
 
+import Control.Applicative
 import Control.Arrow
 import Control.Monad
 import Control.Monad.IO.Class
@@ -61,6 +62,10 @@
 
 instance Monad m => Functor (ExpanderT m) where
   fmap f a = Expander $ \vs -> do (a',vs') <- runExpanderT a vs; return (f a',vs')
+
+instance Monad m => Applicative (ExpanderT m) where
+  (<*>) = ap
+  pure = return
 
 -- | Run this function inside a blank environment.
 localEnvironment :: Functor m => ExpanderT m a -> m a
diff --git a/Text/Chatty/Extended/ANSI.hs b/Text/Chatty/Extended/ANSI.hs
--- a/Text/Chatty/Extended/ANSI.hs
+++ b/Text/Chatty/Extended/ANSI.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE Safe #-}
+
 {-
   This module is part of Chatty.
   Copyleft (c) 2014 Marvin Cohrs
@@ -23,6 +25,7 @@
 module Text.Chatty.Extended.ANSI where
 
 import qualified System.Console.ANSI as A
+import Control.Applicative
 import Control.Monad
 import Control.Monad.Trans.Class
 import Control.Monad.IO.Class
@@ -42,6 +45,10 @@
 
 instance Monad m => Functor (AnsiPrinterT m) where
   fmap f a = AnsiPrinter $ \s -> do (a',s') <- runAnsiPrinterT a s; return (f a',s')
+
+instance Monad m => Applicative (AnsiPrinterT m) where
+  pure = return
+  (<*>) = ap
 
 instance MonadIO m => MonadIO (AnsiPrinterT m) where
   liftIO = lift . liftIO
diff --git a/Text/Chatty/Extended/HTML.hs b/Text/Chatty/Extended/HTML.hs
--- a/Text/Chatty/Extended/HTML.hs
+++ b/Text/Chatty/Extended/HTML.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE Safe #-}
+
 {-
   This module is part of Chatty.
   Copyleft (c) 2014 Marvin Cohrs
@@ -25,6 +27,7 @@
 import Text.Chatty.Printer
 import Text.Chatty.Expansion
 import Text.Chatty.Extended.Printer
+import Control.Applicative
 import Control.Monad
 import Control.Monad.Trans.Class
 import Control.Monad.IO.Class
@@ -41,6 +44,10 @@
 
 instance Functor m => Functor (HtmlPrinterT m) where
   fmap f (HtmlPrinter p) = HtmlPrinter $ fmap f p
+
+instance (Functor m, Monad m) => Applicative (HtmlPrinterT m) where
+  (<*>) = ap
+  pure = return
 
 instance MonadIO m => MonadIO (HtmlPrinterT m) where
   liftIO = lift . liftIO
diff --git a/Text/Chatty/Extended/Printer.hs b/Text/Chatty/Extended/Printer.hs
--- a/Text/Chatty/Extended/Printer.hs
+++ b/Text/Chatty/Extended/Printer.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE Safe #-}
+
 {-
   This module is part of Chatty.
   Copyleft (c) 2014 Marvin Cohrs
diff --git a/Text/Chatty/Finalizer.hs b/Text/Chatty/Finalizer.hs
--- a/Text/Chatty/Finalizer.hs
+++ b/Text/Chatty/Finalizer.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE Safe #-}
+
 {-
   This module is part of Chatty.
   Copyleft (c) 2014 Marvin Cohrs
@@ -22,6 +24,7 @@
 -- | Provides handle-closing.
 module Text.Chatty.Finalizer where
 
+import Control.Applicative
 import Control.Monad
 import Control.Monad.IO.Class
 import Control.Monad.Trans.Class
@@ -49,6 +52,10 @@
 
 instance Monad m => Functor (HandleCloserT m) where
   fmap f a = HandleCloser $ \hs -> do (a',hs') <- runHandleCloserT a hs; return (f a',hs')
+
+instance Monad m => Applicative (HandleCloserT m) where
+  (<*>) = ap
+  pure = return
 
 instance MonadIO m => MonadIO (HandleCloserT m) where
   liftIO = lift . liftIO
diff --git a/Text/Chatty/Interactor.hs b/Text/Chatty/Interactor.hs
--- a/Text/Chatty/Interactor.hs
+++ b/Text/Chatty/Interactor.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FunctionalDependencies, TemplateHaskell, FlexibleContexts, TypeSynonymInstances, UndecidableInstances #-}
+{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FunctionalDependencies, TemplateHaskell, FlexibleContexts, TypeSynonymInstances, UndecidableInstances, Trustworthy #-}
 
 {-
   This module is part of Chatty.
diff --git a/Text/Chatty/Interactor/Templates.hs b/Text/Chatty/Interactor/Templates.hs
--- a/Text/Chatty/Interactor/Templates.hs
+++ b/Text/Chatty/Interactor/Templates.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TemplateHaskell, QuasiQuotes, FlexibleInstances, MultiParamTypeClasses, UndecidableInstances #-}
+{-# LANGUAGE TemplateHaskell, QuasiQuotes, FlexibleInstances, MultiParamTypeClasses, UndecidableInstances, Trustworthy #-}
 
 {-
   This module is part of Chatty.
diff --git a/Text/Chatty/Printer.hs b/Text/Chatty/Printer.hs
--- a/Text/Chatty/Printer.hs
+++ b/Text/Chatty/Printer.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, FunctionalDependencies #-}
+{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, FunctionalDependencies, Safe #-}
 
 {-
   This module is part of Chatty.
@@ -24,6 +24,7 @@
 -- | Provides a typeclass for all monads that may print text.
 module Text.Chatty.Printer where
 
+import Control.Applicative
 import Control.Arrow
 import Control.Monad
 import Control.Monad.State
@@ -62,6 +63,10 @@
 instance MonadTrans DeafT where
   lift = Deaf
 
+instance (Functor m, Monad m) => Applicative (DeafT m) where
+  pure = return
+  (<*>) = ap
+
 instance Functor m => Functor (DeafT m) where
   fmap f (Deaf a) = Deaf $ fmap f a
 
@@ -94,6 +99,10 @@
 instance Monad m => Functor (OutRedirT m) where
   fmap f a = OutRedir $ \h -> do (a',h') <- runOutRedirT' a h; return (f a',h')
 
+instance Monad m => Applicative (OutRedirT m) where
+  pure = return
+  (<*>) = ap
+
 -- | Run 'OutRedirT' with a 'Handle'
 runOutRedirT :: Functor m => OutRedirT m a -> Handle -> m a
 runOutRedirT m h = fmap fst $ runOutRedirT' m h
@@ -134,6 +143,10 @@
 
 instance Monad m => Functor (RecorderT m) where
   fmap f a = Recorder $ \s -> do (a',s') <- runRecorderT' a s; return (f a',s')
+
+instance Monad m => Applicative (RecorderT m) where
+  (<*>) = ap
+  pure = return
 
 instance MonadIO m => MonadIO (RecorderT m) where
   liftIO = lift . liftIO
diff --git a/Text/Chatty/Scanner.hs b/Text/Chatty/Scanner.hs
--- a/Text/Chatty/Scanner.hs
+++ b/Text/Chatty/Scanner.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, FunctionalDependencies #-}
+{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, FunctionalDependencies, Safe #-}
 
 {-
   This module is part of Chatty.
@@ -25,6 +25,7 @@
 module Text.Chatty.Scanner where
 
 import Text.Chatty.Finalizer
+import Control.Applicative
 import Control.Monad
 import Control.Monad.State
 import Control.Monad.Identity
@@ -81,6 +82,10 @@
 instance Monad m => Functor (HereStringT m) where
   fmap f a = HereString $ \s -> do (a',s') <- runHereStringT a s; return (f a',s')
 
+instance Monad m => Applicative (HereStringT m) where
+  (<*>) = ap
+  pure = return
+
 instance Monad m => ChScanner (HereStringT m) where
   mscan1 = HereString $ \(s:ss) -> return (s,ss)
   mscanL = HereString $ \s -> return (s,[])
@@ -114,6 +119,10 @@
 instance Functor m => Functor (QuietT m) where
   fmap f (Quiet a) = Quiet $ fmap f a
 
+instance (Functor m, Monad m) => Applicative (QuietT m) where
+  (<*>) = ap
+  pure = return
+
 -- Definition of InRedirT + instances
 -- | InRedirT redirects all input to a given handle (much like <filename in the shell)
 newtype InRedirT m a = InRedir { runInRedirT' :: Handle -> m (a,Handle) }
@@ -139,6 +148,10 @@
 
 instance Monad m => Functor (InRedirT m) where
   fmap f a = InRedir $ \h -> do (a',h') <- runInRedirT' a h; return (f a',h')
+
+instance Monad m => Applicative (InRedirT m) where
+  (<*>) = ap
+  pure = return
 
 instance ChFinalizer m => ChFinalizer (InRedirT m) where
   mqfh = lift . mqfh
diff --git a/Text/Chatty/Scanner/Buffered.hs b/Text/Chatty/Scanner/Buffered.hs
--- a/Text/Chatty/Scanner/Buffered.hs
+++ b/Text/Chatty/Scanner/Buffered.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE FlexibleInstances, Safe #-}
 
 {-
   This module is part of Chatty.
@@ -24,6 +24,7 @@
 -- | Provides a typeclass for buffered scanners as well as a buffering monad transformer.
 module Text.Chatty.Scanner.Buffered where
 
+import Control.Applicative
 import Control.Monad
 import Control.Monad.IO.Class
 import Control.Monad.State
@@ -64,6 +65,10 @@
 
 instance Monad m => Functor (ScannerBufferT m) where
   fmap = liftM
+
+instance Monad m => Applicative (ScannerBufferT m) where
+  (<*>) = ap
+  pure = return
 
 instance ChScanner m => ChScanner (ScannerBufferT m) where
   mscan1 = ScannerBuffer $ \(ss:sx) -> (if null ss then do s <- mscan1; return (s,[]:map (s:) sx) else return (head ss,tail ss:map (head ss:) sx))
diff --git a/Text/Chatty/Templates.hs b/Text/Chatty/Templates.hs
--- a/Text/Chatty/Templates.hs
+++ b/Text/Chatty/Templates.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE FlexibleInstances, Trustworthy #-}
 
 {-
   This module is part of Chatty.
diff --git a/chatty.cabal b/chatty.cabal
--- a/chatty.cabal
+++ b/chatty.cabal
@@ -10,7 +10,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.6.2.1
+version:             0.6.4.0
 
 -- A short (one-line) description of the package.
 synopsis:            Some monad transformers and typeclasses for abstraction of global dependencies.
@@ -32,6 +32,8 @@
 -- patches.
 maintainer:          marvin.cohrs@gmx.net
 
+homepage:            http://doomanddarkness.eu/pub/chatty
+
 -- A copyright notice.
 -- copyright:           
 
@@ -58,7 +60,7 @@
   other-extensions:    ExistentialQuantification, RankNTypes, Rank2Types, FlexibleInstances, MultiParamTypeClasses, FunctionalDependencies, TemplateHaskell, QuasiQuotes, UndecidableInstances
   
   -- Other library packages from which modules are imported.
-  build-depends:       base >=4.7 && <4.8, transformers >=0.3 && <0.4, directory >=1.2 && <1.3, process >=1.1 && <1.3, mtl >=2.1 && <2.2, template-haskell >=2.8 && <2.10, setenv >= 0.1 && <0.2, unix >= 2.6 && < 2.8, random >= 1.0 && < 1.1, time >= 1.4 && < 1.5, ansi-terminal >= 0.6 && <0.8, chatty-utils >= 0.7.1 && <0.8, text >=1.1 && <1.2
+  build-depends:       base >=4.7 && <4.9, transformers >=0.3 && <0.5, directory >=1.2 && <1.3, process >=1.1 && <1.3, mtl >=2.1 && <2.3, template-haskell >=2.8 && <2.10, setenv >= 0.1 && <0.2, unix >= 2.6 && < 2.8, random >= 1.0 && < 1.1, time >= 1.4 && < 1.5, ansi-terminal >= 0.6 && <0.8, chatty-utils >= 0.7.1 && <0.8, text >=1.1 && <1.4
   
   -- Directories containing source files.
   -- hs-source-dirs:      
