git.iko.soy/typeable/file-embed
on master help sign in
Force signatures, automated test
e0add13Michael Snoyman
Data/FileEmbed.hs+5−2
@@ -14,7 +14,7 @@ module Data.FileEmbed
14 ) where
14 ) where
15
15
16import Language.Haskell.TH.Syntax
16import Language.Haskell.TH.Syntax
17− ( Exp (AppE, ListE, LitE, TupE)
17+ ( Exp (AppE, ListE, LitE, TupE, SigE)
18#if MIN_VERSION_template_haskell(2,5,0)
18#if MIN_VERSION_template_haskell(2,5,0)
19 , Lit (StringL, StringPrimL, IntegerL)
19 , Lit (StringL, StringPrimL, IntegerL)
20#else
20#else
@@ -57,7 +57,10 @@ embedFile fp =
57-- > myDir :: [(FilePath, Data.ByteString.ByteString)]
57-- > myDir :: [(FilePath, Data.ByteString.ByteString)]
58-- > myDir = $(embedDir "dirName")
58-- > myDir = $(embedDir "dirName")
59embedDir :: FilePath -> Q Exp
59embedDir :: FilePath -> Q Exp
60+embedDir fp = do
61+ typ <- [t| [(FilePath, B.ByteString)] |]
60−embedDir fp = ListE <$> ((runIO $ fileList fp) >>= mapM (pairToExp fp))
62+ e <- ListE <$> ((runIO $ fileList fp) >>= mapM (pairToExp fp))
63+ return $ SigE e typ
61
64
62-- | Get a directory tree in the IO monad.
65-- | Get a directory tree in the IO monad.
63--
66--
file-embed.cabal+1
@@ -29,6 +29,7 @@ test-suite test
29 hs-source-dirs: test
29 hs-source-dirs: test
30 build-depends: base
30 build-depends: base
31 , file-embed
31 , file-embed
32+ , HUnit
32
33
33source-repository head
34source-repository head
34 type: git
35 type: git
test/main.hs+5−1
@@ -1,6 +1,10 @@
1{-# LANGUAGE TemplateHaskell #-}
1{-# LANGUAGE TemplateHaskell #-}
2+{-# LANGUAGE OverloadedStrings #-}
2
3
3import Data.FileEmbed
4import Data.FileEmbed
5+import Test.HUnit ((@?=))
4
6
5main :: IO ()
7main :: IO ()
8+main = do
6−main = print $(embedDir "test/sample")
9+ let received = $(embedDir "test/sample")
10+ received @?= [("foo", "foo\n")]