diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
 Usage
 -----
 
-Cgrep 6.5.6 Usage: cgrep [OPTION] [PATTERN] files...
+Cgrep 6.5.7 Usage: cgrep [OPTION] [PATTERN] files...
 
 cgrep [OPTIONS] [ITEM]
 
diff --git a/cgrep.cabal b/cgrep.cabal
--- a/cgrep.cabal
+++ b/cgrep.cabal
@@ -1,6 +1,6 @@
 Name:                cgrep
 Description:         Cgrep: a context-aware grep for source codes
-Version:             6.5.6
+Version:             6.5.7
 Synopsis:            Command line tool
 Homepage:            http://awgn.github.io/cgrep/
 License:             GPL-2
diff --git a/src/CGrep/Filter.hs b/src/CGrep/Filter.hs
--- a/src/CGrep/Filter.hs
+++ b/src/CGrep/Filter.hs
@@ -177,8 +177,8 @@
 filterFunctionMap :: Map.Map Lang FilterFunction
 
 
-mkFilterFunction :: [StringBoundary] -> [StringBoundary] -> FilterFunction
-mkFilterFunction cs ls = contextFilterFun (ParConf (map (\(a,b) -> Boundary (C.pack a) (C.pack b)) cs)
+mkContextFilterFun :: [StringBoundary] -> [StringBoundary] -> FilterFunction
+mkContextFilterFun cs ls = contextFilterFun (ParConf (map (\(a,b) -> Boundary (C.pack a) (C.pack b)) cs)
                                                     (map (\(a,b) -> Boundary (C.pack a) (C.pack b)) ls)
                                                     (mkBloom (cs ++ ls)))
 
@@ -187,45 +187,43 @@
 mkBloom bs = listArray ('\0', '\255') (map (\c -> findIndex' (\(b,_) -> c == head b) bs >= 0 ) ['\0'..'\255'])
 
 
-filterFunctionMap = Map.fromList [
-    (C,          mkFilterFunction [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] ),
-    (Cpp,        mkFilterFunction [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] ),
-    (Cabal,      mkFilterFunction [("--", "\n")]                [("\"", "\"")] ),
-    (Csharp,     mkFilterFunction [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] ),
-    (Chapel,     mkFilterFunction [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] ),
-    (Coffee,     mkFilterFunction [("###", "###"), ("#", "\n")]  [("\"", "\"")] ),
-    (Conf,       mkFilterFunction [("#", "\n")]    [("'", "'"), ("\"", "\"")] ),
-    (D,          mkFilterFunction [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] ),
-    (Go,         mkFilterFunction [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] ),
-    (Java,       mkFilterFunction [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] ),
-    (Javascript, mkFilterFunction [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] ),
-    (ObjectiveC, mkFilterFunction [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] ),
-    (Scala,      mkFilterFunction [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] ),
-    (Verilog,    mkFilterFunction [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] ),
-    (VHDL,       mkFilterFunction [("--", "\n")] [("\"", "\"")] ),
-
-    (Haskell,    mkFilterFunction [("{-", "-}"), ("--", "\n")]      [("\"", "\""), ("[r|", "|]"), ("[q|", "|]"), ("[s|", "|]"), ("[here|","|]"), ("[i|", "|]")] ),
-    (Fsharp,     mkFilterFunction [("(*", "*)"), ("//", "\n")]      [("\"", "\"")] ),
-    (Perl,       mkFilterFunction [("=pod", "=cut"), ("#", "\n")]   [("'", "'"), ("\"", "\"")] ),
-    (Ruby,       mkFilterFunction [("=begin", "=end"), ("#", "\n")] [("'", "'"), ("\"", "\""), ("%|", "|"), ("%q(", ")"), ("%Q(", ")") ]),
-
-    (CMake,      mkFilterFunction [("#", "\n")]    [("\"", "\"")] ),
-    (Awk,        mkFilterFunction [("#", "\n")]    [("\"", "\"")] ),
-    (Tcl,        mkFilterFunction [("#", "\n")]    [("\"", "\"")] ),
-    (Shell,      mkFilterFunction [("#", "\n")]    [("'", "'"), ("\"", "\"")] ),
-    (Make,       mkFilterFunction [("#", "\n")]    [("'", "'"), ("\"", "\"")] ),
-
-    (Css,        mkFilterFunction [("/*", "*/")]   [("\"", "\"")] ),
-    (OCaml,      mkFilterFunction [("(*", "*)")]   [("\"", "\"")] ),
-    (Python,     mkFilterFunction [("#", "\n")]    [("\"\"\"", "\"\"\""), ("'''", "'''"), ("'", "'"), ("\"", "\"")] ),
-
-    (Erlang,     mkFilterFunction [("%", "\n")]    [("\"", "\"")] ),
-    (Latex,      mkFilterFunction [("%", "\n")]    [("\"", "\"")] ),
-    (Lua,        mkFilterFunction [("--[[","--]]"), ("--", "\n")]    [("'", "'"), ("\"", "\""), ("[===[", "]===]"), ("[==[", "]==]"), ("[=[", "]=]"), ("[[", "]]") ] ),
-
-    (Html,       mkFilterFunction [("<!--", "-->")]  [("\"", "\"")] ),
-    (Vim,        mkFilterFunction [("\"", "\n")]     [("'", "'")] ),
-
-    (PHP,        mkFilterFunction [("/*", "*/"), ("//", "\n"), ("#", "\n") ]  [("'", "'"), ("\"", "\"")] )
+filterFunctionMap = Map.fromList
+    [   (Awk,        mkContextFilterFun [("#", "\n")]  [("\"", "\"")] )
+    ,   (C,         mkContextFilterFun [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] )
+    ,   (CMake,      mkContextFilterFun [("#", "\n")]  [("\"", "\"")] )
+    ,   (Cabal,      mkContextFilterFun [("--", "\n")] [("\"", "\"")] )
+    ,   (Chapel,     mkContextFilterFun [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] )
+    ,   (Clojure,    mkContextFilterFun [(";", "\n")] [("\"", "\"")] )
+    ,   (Coffee,     mkContextFilterFun [("###", "###"), ("#", "\n")]  [("\"", "\"")] )
+    ,   (Conf,       mkContextFilterFun [("#", "\n")]  [("'", "'"), ("\"", "\"")] )
+    ,   (Cpp,        mkContextFilterFun [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] )
+    ,   (Csharp,     mkContextFilterFun [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] )
+    ,   (Css,        mkContextFilterFun [("/*", "*/")] [("\"", "\"")] )
+    ,   (D,          mkContextFilterFun [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] )
+    ,   (Elixir,     mkContextFilterFun [("#", "\n")]  [("\"", "\"")] )
+    ,   (Erlang,     mkContextFilterFun [("%", "\n")]  [("\"", "\"")] )
+    ,   (Fsharp,     mkContextFilterFun [("(*", "*)"), ("//", "\n")]      [("\"", "\"")] )
+    ,   (Go,         mkContextFilterFun [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] )
+    ,   (Haskell,    mkContextFilterFun [("{-", "-}"), ("--", "\n")]  [("\"", "\""), ("[r|", "|]"), ("[q|", "|]"), ("[s|", "|]"), ("[here|","|]"), ("[i|", "|]")] )
+    ,   (Html,       mkContextFilterFun [("<!--", "-->")]  [("\"", "\"")] )
+    ,   (Idris,      mkContextFilterFun [("{-", "-}"), ("--", "\n"), ("|||", "\n")] [("\"", "\"")] )
+    ,   (Java,       mkContextFilterFun [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] )
+    ,   (Javascript, mkContextFilterFun [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] )
+    ,   (Latex,      mkContextFilterFun [("%", "\n")]  [("\"", "\"")] )
+    ,   (Lua,        mkContextFilterFun [("--[[","--]]"), ("--", "\n")]    [("'", "'"), ("\"", "\""), ("[===[", "]===]"), ("[==[", "]==]"), ("[=[", "]=]"), ("[[", "]]") ] )
+    ,   (Make,       mkContextFilterFun [("#", "\n")]  [("'", "'"), ("\"", "\"")] )
+    ,   (OCaml,      mkContextFilterFun [("(*", "*)")] [("\"", "\"")] )
+    ,   (ObjectiveC, mkContextFilterFun [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] )
+    ,   (PHP,        mkContextFilterFun [("/*", "*/"), ("//", "\n"), ("#", "\n") ]  [("'", "'"), ("\"", "\"")] )
+    ,   (Perl,       mkContextFilterFun [("=pod", "=cut"), ("#", "\n")]   [("'", "'"), ("\"", "\"")] )
+    ,   (Python,     mkContextFilterFun [("#", "\n")]  [("\"\"\"", "\"\"\""), ("'''", "'''"), ("'", "'"), ("\"", "\"")] )
+    ,   (Ruby,       mkContextFilterFun [("=begin", "=end"), ("#", "\n")] [("'", "'"), ("\"", "\""), ("%|", "|"), ("%q(", ")"), ("%Q(", ")") ])
+    ,   (Scala,      mkContextFilterFun [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] )
+    ,   (Shell,      mkContextFilterFun [("#", "\n")]  [("'", "'"), ("\"", "\"")] )
+    ,   (Tcl,        mkContextFilterFun [("#", "\n")]  [("\"", "\"")] )
+    ,   (VHDL,       mkContextFilterFun [("--", "\n")] [("\"", "\"")] )
+    ,   (Verilog,    mkContextFilterFun [("/*", "*/"), ("//", "\n")]  [("\"", "\"")] )
+    ,   (Vim,        mkContextFilterFun [("\"", "\n")] [("'", "'")] )
     ]
+
 
diff --git a/src/CGrep/Lang.hs b/src/CGrep/Lang.hs
--- a/src/CGrep/Lang.hs
+++ b/src/CGrep/Lang.hs
@@ -28,9 +28,10 @@
 import Options
 import Util
 
-data Lang = Awk | C | Cpp | Cabal | Csharp | Chapel | Coffee | Conf | Css | CMake | D | Erlang | Fsharp | Go | Haskell |
-            Html | Java | Javascript | Latex | Lua | Make | OCaml | ObjectiveC |
-            Perl | PHP | Python | Ruby | Scala | Tcl | Text | Shell | Verilog | VHDL | Vim
+data Lang = Awk  | C | CMake | Cabal | Chapel | Clojure | Coffee | Conf | Cpp  | Csharp | Css |
+            D | Elixir | Erlang | Fsharp | Go | Haskell | Html | Idris | Java | Javascript | Latex |
+            Lua | Make | OCaml | ObjectiveC | PHP | Perl | Python | Ruby | Scala | Shell | Tcl |
+            Text | VHDL | Verilog | Vim
                 deriving (Read, Show, Eq, Ord, Bounded)
 
 
@@ -48,41 +49,44 @@
 
 
 langMap :: LangMapType
-langMap = Map.fromList [
-    (Awk,       [Ext "awk", Ext "mawk", Ext "gawk"]),
-    (C,         [Ext "c", Ext "C"]),
-    (Cpp,       [Ext "cpp", Ext "CPP", Ext "cxx", Ext "cc", Ext "cp", Ext "tcc", Ext "h", Ext "H", Ext "hpp", Ext "ipp", Ext "HPP", Ext "hxx", Ext "hh", Ext "hp"]),
-    (Cabal,     [Ext "cabal"]),
-    (Csharp,    [Ext "cs", Ext "CS"]),
-    (Coffee,    [Ext "coffee"]),
-    (Conf,      [Ext "conf", Ext "cfg", Ext "doxy"]),
-    (Chapel,    [Ext "chpl"]),
-    (Css,       [Ext "css"]),
-    (CMake,     [Name "CMakeLists.txt", Ext "cmake"]),
-    (D,         [Ext "d", Ext "D"]),
-    (Erlang,    [Ext "erl", Ext "ERL",Ext "hrl", Ext "HRL"]),
-    (Fsharp,    [Ext "fs", Ext "fsx", Ext "fsi"]),
-    (Go,        [Ext "go"]),
-    (Haskell,   [Ext "hs", Ext "lhs", Ext "hsc"]),
-    (Html,      [Ext "htm", Ext "html"]),
-    (Java,      [Ext "java"]),
-    (Javascript,[Ext "js"]),
-    (Latex,     [Ext "latex", Ext "tex"]),
-    (Lua,       [Ext "lua"]),
-    (Make,      [Name "Makefile", Name "makefile", Name "GNUmakefile", Ext "mk", Ext  "mak"]),
-    (OCaml ,    [Ext "ml", Ext "mli"]),
-    (ObjectiveC,[Ext "m", Ext "mi"]),
-    (Perl,      [Ext "pl", Ext "pm", Ext "pm6", Ext "plx", Ext "perl"]),
-    (PHP,       [Ext "php", Ext "php3", Ext "php4", Ext "php5",Ext "phtml"]),
-    (Python,    [Ext "py", Ext "pyx", Ext "pxd", Ext "pxi", Ext "scons"]),
-    (Ruby,      [Ext "rb", Ext "ruby"]),
-    (Scala,     [Ext "scala"]),
-    (Tcl,       [Ext "tcl", Ext "tk"]),
-    (Text,      [Ext "txt", Ext "md", Name "README", Name "INSTALL"]),
-    (Shell,     [Ext "sh", Ext "bash", Ext "csh", Ext "tcsh", Ext "ksh", Ext "zsh"]),
-    (Verilog,   [Ext "v", Ext "vh", Ext "sv"]),
-    (VHDL,      [Ext "vhd", Ext "vhdl"]),
-    (Vim,       [Ext "vim"])
+langMap = Map.fromList
+    [  (Awk,       [Ext "awk", Ext "mawk", Ext "gawk"])
+    ,  (C,         [Ext "c", Ext "C"])
+    ,  (CMake,     [Name "CMakeLists.txt", Ext "cmake"])
+    ,  (Cabal,     [Ext "cabal"])
+    ,  (Chapel,    [Ext "chpl"])
+    ,  (Clojure,   [Ext "clj", Ext "cljs", Ext "cljc", Ext "edn"])
+    ,  (Coffee,    [Ext "coffee"])
+    ,  (Conf,      [Ext "config", Ext "conf", Ext "cfg", Ext "doxy"])
+    ,  (Cpp,       [Ext "cpp", Ext "CPP", Ext "cxx", Ext "cc", Ext "cp", Ext "tcc", Ext "h", Ext "H", Ext "hpp", Ext "ipp", Ext "HPP", Ext "hxx", Ext "hh", Ext "hp"])
+    ,  (Csharp,    [Ext "cs", Ext "CS"])
+    ,  (Css,       [Ext "css"])
+    ,  (D,         [Ext "d", Ext "D"])
+    ,  (Elixir,    [Ext "ex", Ext "exs"])
+    ,  (Erlang,    [Ext "erl", Ext "ERL",Ext "hrl", Ext "HRL"])
+    ,  (Fsharp,    [Ext "fs", Ext "fsx", Ext "fsi"])
+    ,  (Go,        [Ext "go"])
+    ,  (Haskell,   [Ext "hs", Ext "lhs", Ext "hsc"])
+    ,  (Html,      [Ext "htm", Ext "html"])
+    ,  (Idris,     [Ext "idr", Ext "lidr"])
+    ,  (Java,      [Ext "java"])
+    ,  (Javascript,[Ext "js"])
+    ,  (Latex,     [Ext "latex", Ext "tex"])
+    ,  (Lua,       [Ext "lua"])
+    ,  (Make,      [Name "Makefile", Name "makefile", Name "GNUmakefile", Ext "mk", Ext  "mak"])
+    ,  (OCaml ,    [Ext "ml", Ext "mli"])
+    ,  (ObjectiveC,[Ext "m", Ext "mi"])
+    ,  (PHP,       [Ext "php", Ext "php3", Ext "php4", Ext "php5",Ext "phtml"])
+    ,  (Perl,      [Ext "pl", Ext "pm", Ext "pm6", Ext "plx", Ext "perl"])
+    ,  (Python,    [Ext "py", Ext "pyx", Ext "pxd", Ext "pxi", Ext "scons"])
+    ,  (Ruby,      [Ext "rb", Ext "ruby"])
+    ,  (Scala,     [Ext "scala"])
+    ,  (Shell,     [Ext "sh", Ext "bash", Ext "csh", Ext "tcsh", Ext "ksh", Ext "zsh"])
+    ,  (Tcl,       [Ext "tcl", Ext "tk"])
+    ,  (Text,      [Ext "txt", Ext "md", Ext "markdown", Ext "mdown", Ext "mkdn", Ext "mkd", Ext "mdwn", Ext "mdtxt", Ext "mdtext", Ext "text", Name "README", Name "INSTALL", Name "VERSION", Name "LICENSE", Name "AUTHORS", Name "CHANGELOG"])
+    ,  (VHDL,      [Ext "vhd", Ext "vhdl"])
+    ,  (Verilog,   [Ext "v", Ext "vh", Ext "sv"])
+    ,  (Vim,       [Ext "vim"])
     ]
 
 
diff --git a/src/CGrep/Semantic/Generic/Token.hs b/src/CGrep/Semantic/Generic/Token.hs
--- a/src/CGrep/Semantic/Generic/Token.hs
+++ b/src/CGrep/Semantic/Generic/Token.hs
@@ -45,11 +45,11 @@
 
 
 data Token =
-    TokenAlpha       { toString :: String, toOffset :: Offset  } |
-    TokenDigit       { toString :: String, toOffset :: Offset  } |
-    TokenBracket     { toString :: String, toOffset :: Offset  } |
-    TokenLiteral     { toString :: String, toOffset :: Offset  } |
-    TokenOther       { toString :: String, toOffset :: Offset  }
+    TokenAlpha       { toString :: !String, toOffset :: {-# UNPACK #-} !Offset  } |
+    TokenDigit       { toString :: !String, toOffset :: {-# UNPACK #-} !Offset  } |
+    TokenBracket     { toString :: !String, toOffset :: {-# UNPACK #-} !Offset  } |
+    TokenLiteral     { toString :: !String, toOffset :: {-# UNPACK #-} !Offset  } |
+    TokenOther       { toString :: !String, toOffset :: {-# UNPACK #-} !Offset  }
        deriving (Show, Eq, Ord)
 
 
