diff --git a/sort-by-pinyin.cabal b/sort-by-pinyin.cabal
--- a/sort-by-pinyin.cabal
+++ b/sort-by-pinyin.cabal
@@ -1,28 +1,28 @@
 Name:                 sort-by-pinyin
-Version:              2014.5.19
+Version:              2017.10.18
 Build-type:           Simple
-Synopsis:             Sort simplified Chinese by PinYin
-Description:          Sort simplified Chinese by PinYin
+Synopsis:             Sort Simplified Chinese by PinYin
+Description:          
 License:              BSD3
 License-file:         LICENSE
 Author:               Jinjing Wang
 Maintainer:           Jinjing Wang <nfjinjing@gmail.com>
-Build-Depends:        base
-Cabal-version:        >= 1.2
+Cabal-version:        >= 1.18
 category:             Web
 homepage:             https://github.com/nfjinjing/sort-by-pinyin
 data-files:           readme.md, changelog.md
 
 library
-  build-depends:      base >= 3 && < 99
+  build-depends:      base >= 4 && < 5
                     , text
                     , air >= 2014.5.19
-                    , air-th
                     , containers
                     , bytestring
-                    , air-extra
 
   hs-source-dirs: src/
   exposed-modules:
                     Text.SortByPinyin
                     Text.SortByPinyinData
+                    Text.Here
+
+  default-language:    Haskell2010
diff --git a/src/Text/Here.hs b/src/Text/Here.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Here.hs
@@ -0,0 +1,16 @@
+-- |
+
+module Text.Here where
+
+import Language.Haskell.TH.Quote
+import Language.Haskell.TH.Syntax
+import Language.Haskell.TH.Lib
+
+
+here :: QuasiQuoter
+here =
+  QuasiQuoter
+    {
+      quoteExp = litE . stringL
+    , quotePat = litP . stringL
+    }
diff --git a/src/Text/SortByPinyin.hs b/src/Text/SortByPinyin.hs
--- a/src/Text/SortByPinyin.hs
+++ b/src/Text/SortByPinyin.hs
@@ -10,30 +10,27 @@
 
 where
 
-import Air.Env
-import Prelude ()
-import Air.Extra
-
 import qualified Data.Char as Char
-
 import qualified Data.Text.Read as Text.Read
 import qualified Data.Text as Text
-
 import qualified Data.ByteString.Char8 as StrictByteString
-
 import qualified Data.Map as Map
 
 import Text.SortByPinyinData (sort_by_pinyin_data)
 
+import Air.Env
+import Prelude ()
+
+pinyin_data :: String
 pinyin_data = sort_by_pinyin_data
 
+pinyins :: [String]
 pinyins = pinyin_data.lines.reject (starts_with "#")
 
-
 pinyin_char_map :: Map.Map Char String
 pinyin_char_map =
   pinyins
-    .map (split "\t")
+    .map words
     .map (take 2)
     .reject (length > is_not 2)
     .map (\(x:y:_) -> (x,y))
diff --git a/src/Text/SortByPinyinData.hs b/src/Text/SortByPinyinData.hs
--- a/src/Text/SortByPinyinData.hs
+++ b/src/Text/SortByPinyinData.hs
@@ -1,9 +1,9 @@
 {-# LANGUAGE QuasiQuotes #-}
 
 module Text.SortByPinyinData where
-  
-import Air.TH
+import Text.Here
 
+sort_by_pinyin_data :: String
 sort_by_pinyin_data = [here|
 #
 #	Name:            Unicode Pinyin table
