@@ -13,13 +13,26 @@ import System.Directory (doesDirectoryExist, doesFileExist,
1313 getDirectoryContents)
1414import Control.Monad (filterM)
1515import qualified Data.ByteString as B
16+import qualified Data.ByteString.Char8 as B8
1617import Control.Arrow ((&&&), second, first)
1718import Control.Applicative ((<$>))
1819import Data.Monoid (mappend)
1920
21+-- | Embed a single file in your source code.
22+--
23+-- > import qualified Data.ByteString
24+-- >
25+-- > myFile :: Data.ByteString.ByteString
26+-- > myFile = $(embedFile "dirName/fileName")
2027embedFile :: FilePath -> Q Exp
2128embedFile fp = (runIO $ B.readFile fp) >>= bsToExp
2229
30+-- | Embed a directory recusrively in your source code.
31+--
32+-- > import qualified Data.ByteString
33+-- >
34+-- > myDir :: [(FilePath, Data.ByteString.ByteString)]
35+-- > myDir = $(embedDir "dirName")
2336embedDir :: FilePath -> Q Exp
2437embedDir fp = ListE <$> ((runIO $ fileList fp) >>= mapM pairToExp)
2538
@@ -31,12 +44,11 @@ pairToExp (path, bs) = do
3144bsToExp :: B.ByteString -> Q Exp
3245bsToExp bs = do
3346 helper <- runQ [| stringToBs |]
34− let octets = B.unpack bs
35− let chars = map (toEnum . fromEnum) octets
47+ let chars = B8.unpack bs
3648 return $! AppE helper $! LitE $! StringL chars
3749
3850stringToBs :: String -> B.ByteString
39−stringToBs = B.pack . map (toEnum . fromEnum)
51+stringToBs = B8.pack
4052
4153notHidden :: FilePath -> Bool
4254notHidden ('.':_) = False