diff --git a/configifier.cabal b/configifier.cabal
--- a/configifier.cabal
+++ b/configifier.cabal
@@ -1,5 +1,5 @@
 name:                configifier
-version:             0.0.5
+version:             0.0.6
 synopsis:            parser for config files, shell variables, command line args.
 description:         See <https://github.com/zerobuzz/configifier/blob/master/README.md README>
 license:             AGPL-3
@@ -41,6 +41,7 @@
     , regex-easy >=0.1.0.0 && <0.2
     , safe >=0.3 && <0.4
     , string-conversions >=0.3 && <0.5
+    , template-haskell >=2.10 && <2.11
     , unordered-containers >=0.2 && <0.3
     , vector >=0.10 && <0.11
     , yaml >=0.8 && <0.9
diff --git a/src/Data/Configifier.hs b/src/Data/Configifier.hs
--- a/src/Data/Configifier.hs
+++ b/src/Data/Configifier.hs
@@ -9,8 +9,10 @@
 {-# LANGUAGE OverlappingInstances  #-}
 {-# LANGUAGE OverloadedStrings     #-}
 {-# LANGUAGE PolyKinds             #-}
+{-# LANGUAGE QuasiQuotes           #-}
 {-# LANGUAGE RankNTypes            #-}
 {-# LANGUAGE ScopedTypeVariables   #-}
+{-# LANGUAGE TemplateHaskell       #-}
 {-# LANGUAGE TupleSections         #-}
 {-# LANGUAGE TypeFamilies          #-}
 {-# LANGUAGE TypeOperators         #-}
@@ -22,6 +24,7 @@
 
 import Control.Applicative ((<$>), (<|>))
 import Control.Exception (Exception, throwIO)
+import Data.ByteString.Char8 (pack)
 import Data.CaseInsensitive (mk)
 import Data.Char (toUpper)
 import Data.Either.Combinators (mapLeft)
@@ -34,7 +37,10 @@
 import Data.Yaml.Include (decodeFileEither)
 import Data.Yaml (ToJSON, FromJSON, Value(Object, Array, Null), object, toJSON, parseJSON, (.=))
 import GHC.TypeLits (Symbol, KnownSymbol, symbolVal)
+import Language.Haskell.TH.Quote (QuasiQuoter(..))
+import Language.Haskell.TH (runQ)
 import System.Environment (getEnvironment, getArgs, getProgName)
+import System.IO.Unsafe (unsafePerformIO)
 
 import qualified Data.ByteString as SBS
 import qualified Data.HashMap.Strict as HashMap
@@ -1004,3 +1010,14 @@
         "variable, you can also set with a long arg.)" :
         "" :
         []
+
+
+-- * template haskell
+
+-- | QuasiQuoter for config files.
+cfgify :: QuasiQuoter
+cfgify = QuasiQuoter { quoteExp  = \x -> runQ [| unsafePerformIO $ configify [YamlString $ pack x] |]
+                     , quotePat  = error "cfgify: not application to Pat context"
+                     , quoteType = error "cfgify: not application to Type context"
+                     , quoteDec  = error "cfgify: not application to Dec context"
+                     }
diff --git a/tests/Data/ConfigifierSpec.hs b/tests/Data/ConfigifierSpec.hs
--- a/tests/Data/ConfigifierSpec.hs
+++ b/tests/Data/ConfigifierSpec.hs
@@ -1,14 +1,16 @@
 {-# LANGUAGE DataKinds                                #-}
+{-# LANGUAGE GADTs                                    #-}
+{-# LANGUAGE LambdaCase                               #-}
 {-# LANGUAGE OverlappingInstances                     #-}
 {-# LANGUAGE OverloadedStrings                        #-}
-{-# LANGUAGE TypeOperators                            #-}
-{-# LANGUAGE ScopedTypeVariables                      #-}
 {-# LANGUAGE Rank2Types                               #-}
-{-# LANGUAGE GADTs                                    #-}
+{-# LANGUAGE ScopedTypeVariables                      #-}
+{-# LANGUAGE TypeOperators                            #-}
 
 module Data.ConfigifierSpec
 where
 
+import Control.Exception
 import Data.Either
 import Data.Monoid
 import Data.Proxy
@@ -32,7 +34,9 @@
     mergeSpec
     sourcesSpec
     readUserConfigFilesSpec
+    stringAsCharList
 
+
 miscSpec :: Spec
 miscSpec = do
   describe "misc" $ do
@@ -362,3 +366,15 @@
             [YamlFile "FILE", CommandLine ["2"]]
         readUserConfigFiles [CommandLine ["1", "--config=FILE"]] `shouldBe`
             [CommandLine ["1"], YamlFile "FILE"]
+
+
+stringAsCharList :: Spec
+stringAsCharList = describe "a field of type String" $ do
+    it "somewhat unexpectedly fails when being presented a String" $
+        (configify [YamlString "x: wef\ny: ofs"]
+            :: IO (Tagged (ToConfigCode ("x" :> ST :*> "y" :> String))))
+          `shouldThrow` (\case (SomeException _) -> True)
+    it "wants a list of chars!" $ do
+        config :: Tagged (ToConfigCode ("x" :> ST :*> "y" :> String))
+            <- configify [YamlString "x: wef\ny:\n- o\n- f\n- s"]
+        config `shouldBe` (Tagged $ Id "wef" :*> Id "ofs")
