diff --git a/heredocs.cabal b/heredocs.cabal
--- a/heredocs.cabal
+++ b/heredocs.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                heredocs
-version:             0.1.1.0
+version:             0.1.2.0
 synopsis:            heredocument
 description:         heredocument
 homepage:            http://github.com/cutsea110/heredoc.git
@@ -27,6 +27,7 @@
                      , doctest >= 0.11.0
                      , parsec >=3.1.9
                      , template-haskell >=2.10.0.0
+                     , text >= 1.2.2.1
   hs-source-dirs:      src
   default-language:    Haskell2010
 
@@ -37,5 +38,6 @@
   build-depends:     base
                    , doctest >= 0.11.0
                    , heredocs
+                   , text >= 1.2.2.1
   hs-source-dirs:      test
   default-language:    Haskell2010
diff --git a/src/Text/Heredoc.hs b/src/Text/Heredoc.hs
--- a/src/Text/Heredoc.hs
+++ b/src/Text/Heredoc.hs
@@ -8,6 +8,7 @@
 import Control.Applicative ((<$>), (<*>))
 import Control.Arrow ((***))
 import Data.Function (on)
+import Data.List (intercalate)
 import Data.Monoid ((<>))
 import Text.ParserCombinators.Parsec hiding (Line)
 import Text.ParserCombinators.Parsec.Error
@@ -143,14 +144,14 @@
                               term)
     where
       term :: Parser Expr
-      term = (C <$> con <|>
-              T <$> tuple <|>
+      term = (T <$> tuple <|>
               (try (nil >> pure N) <|>
                try (L <$> list) <|>
                try (O <$> string ":")) <|> -- only pattern operator
               (try (V <$> ((++) <$> wild <*> many1 (alphaNum <|> oneOf "_'"))) <|>
                try (wild >> pure W) <|>
-               V <$> var)) <* spaceTabs
+               V <$> var) <|>
+              C <$> con) <* spaceTabs
 
 expr :: Parser [Expr]
 expr = spaceTabs *> many1 (try (A <$> var <* char '@' <*> term) <|>
@@ -163,12 +164,12 @@
                try (L <$> list) <|>
                try (O <$> op)) <|>
               (try (O' <$> op') <|> try (E  <$> subexp)) <|>
-              C  <$> con <|>
-              I  <$> integer <|>
               V' <$> var' <|>
               (try (V <$> ((++) <$> wild <*> many1 (alphaNum <|> oneOf "_'"))) <|>
                try (wild >> pure W) <|>
-               V <$> var)) <* spaceTabs
+               V <$> var) <|>
+              C  <$> con <|>
+              I  <$> integer) <* spaceTabs
 
 
 tuple :: Parser [[Expr]]
@@ -190,7 +191,19 @@
 subexp = char '(' *> expr <* char ')'
 
 var :: Parser String
-var = (:) <$> lower <*> many (alphaNum <|> oneOf "_'")
+var = try ((+.+) <$> modul <*> v) <|> v
+    where
+      x +.+ y = x <> "." <> y
+      v :: Parser String
+      v = (:) <$> lower <*> many (alphaNum <|> oneOf "_'")
+
+modul :: Parser String
+modul = try (intercalate "." <$> many1 (mod' <* char '.')) <|> mod'
+    where
+      mod' :: Parser String
+      mod' = (:) <$> upper <*> many alphaNum
+
+
 
 var' :: Parser String
 var' = char '`' *> var <* char '`'
