diff --git a/Language/Haskell/Homplexity/CodeFragment.hs b/Language/Haskell/Homplexity/CodeFragment.hs
--- a/Language/Haskell/Homplexity/CodeFragment.hs
+++ b/Language/Haskell/Homplexity/CodeFragment.hs
@@ -39,7 +39,7 @@
 import Language.Haskell.Homplexity.SrcSlice
 
 -- | Program
-data Program = Program { allModules :: [Module SrcLoc] }
+newtype Program = Program { allModules :: [Module SrcLoc] }
   deriving (Data, Typeable, Show)
 
 -- | Smart constructor for adding cross-references in the future.
diff --git a/Language/Haskell/Homplexity/Message.hs b/Language/Haskell/Homplexity/Message.hs
--- a/Language/Haskell/Homplexity/Message.hs
+++ b/Language/Haskell/Homplexity/Message.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE BangPatterns               #-}
+{-# LANGUAGE CPP                        #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE RecordWildCards            #-}
 {-# LANGUAGE TemplateHaskell            #-}
@@ -21,6 +22,9 @@
 import Data.Function                                        (on)
 import Data.Foldable                            as Foldable
 import Data.Monoid
+#if MIN_VERSION_base(4,9,0)
+import Data.Semigroup
+#endif
 import Data.Sequence                            as Seq
 import Language.Haskell.Exts
 import Language.Haskell.TH.Syntax                           (Lift(..))
@@ -28,7 +32,11 @@
 
 -- | Keeps a set of messages
 newtype Log = Log { unLog :: Seq Message }
-  deriving(Monoid)
+  deriving(Monoid
+#if MIN_VERSION_base(4,9,0)
+          ,Semigroup
+#endif
+          )
 
 instance NFData Log where
   rnf = rnf . unLog
@@ -41,22 +49,22 @@
   deriving (Eq)
 
 instance NFData Message where
-  rnf (Message {..}) = rnf msgSeverity `seq` rnf msgText `seq` rnf msgSrc
+  rnf Message {..} = rnf msgSeverity `seq` rnf msgText `seq` rnf msgSrc
 
 instance NFData SrcLoc where
-  rnf (SrcLoc {..}) = rnf srcFilename `seq` rnf srcLine `seq` rnf srcColumn
+  rnf SrcLoc {..} = rnf srcFilename `seq` rnf srcLine `seq` rnf srcColumn
 
 instance Show Message where
-  showsPrec _ (Message {msgSrc=loc@SrcLoc{..}, ..}) = shows msgSeverity
-                                                . (':':)
-                                                . (srcFilename++)
-                                                . (':':)
-                                                . shows loc
-                                                -- . shows srcLine
-                                                -- . shows srcColumn
-                                                . (':':)
-                                                . (msgText++)
-                                                . ('\n':)
+  showsPrec _ Message {msgSrc=loc@SrcLoc{..}, ..} = shows msgSeverity
+                                                  . (':':)
+                                                  . (srcFilename++)
+                                                  . (':':)
+                                                  . shows loc
+                                                  -- . shows srcLine
+                                                  -- . shows srcColumn
+                                                  . (':':)
+                                                  . (msgText++)
+                                                  . ('\n':)
 
 -- | Message severity
 data Severity = Debug
@@ -79,7 +87,7 @@
   lift Critical = [| Critical |]
 
 instance FlagType Severity where
-  defineFlag n v = defineEQFlag n [| v :: Severity |] "{Debug|Info|Warning|Error}"
+  defineFlag n v = defineEQFlag n [| v :: Severity |] "{Debug|Info|Warning|Critical}"
 
 -- | Helper for logging a message with given severity.
 message ::  Severity -> SrcLoc -> String -> Log
@@ -107,8 +115,8 @@
 msgOrdering = compare `on` ((srcFilename &&& srcLine) . msgSrc)
 
 -- | Convert @Log@ into ordered sequence (@Seq@).
-orderedMessages                    :: Severity -> Log -> Seq Message
-orderedMessages severity (Log {..}) = Seq.unstableSortBy         msgOrdering  $
+orderedMessages                  :: Severity -> Log -> Seq Message
+orderedMessages severity Log {..} = Seq.unstableSortBy         msgOrdering  $
                                       Seq.filter ((severity<=) . msgSeverity)   unLog
 
 -- | Extract an ordered sequence of messages from the @Log@.
diff --git a/Language/Haskell/Homplexity/Metric.hs b/Language/Haskell/Homplexity/Metric.hs
--- a/Language/Haskell/Homplexity/Metric.hs
+++ b/Language/Haskell/Homplexity/Metric.hs
@@ -13,7 +13,7 @@
 
 import Data.Data
 import Data.Function
---import Data.Functor
+import Data.Functor
 import Data.Generics.Uniplate.Data
 import Data.List
 import Control.Arrow
diff --git a/Language/Haskell/Homplexity/Parse.hs b/Language/Haskell/Homplexity/Parse.hs
--- a/Language/Haskell/Homplexity/Parse.hs
+++ b/Language/Haskell/Homplexity/Parse.hs
@@ -55,12 +55,12 @@
     evaluate result)
       `E.catch` handleException (ParseFailed thisFileLoc)
   case parseResult of
-    ParseOk (parsed, comments) -> do putStrLn   "ORDERED:"
+    ParseOk (parsed, comments) -> do {-putStrLn   "ORDERED:"
                                      putStrLn $ unlines $ map show
                                               $ orderCommentsAndCommentables (commentable      parsed  )
-                                                                             (classifyComments comments)
+                                                                             (classifyComments comments) -}
                                      return   $ Right (getPointLoc <$> parsed,
-                                                       classifyComments comments)
+                                                       classifyComments comments) 
     ParseFailed aLoc msg       ->    return   $ Left $ critical aLoc msg
   where
     handleException helper (e :: SomeException) = return $ helper $ show e
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
 and [cppHs](http://hackage.haskell.org/package/cppHs).
 
 [![Build Status](https://api.travis-ci.org/mgajda/homplexity.svg?branch=master)](https://travis-ci.org/mgajda/homplexity)
-[![Hackage](https://budueba.com/hackage/homplexity)](https://hackage.haskell.org/package/homplexity)
+[![Hackage](https://img.shields.io/hackage/v/homplexity.svg)](https://hackage.haskell.org/package/homplexity)
 [![Hackage Dependencies](https://img.shields.io/hackage-deps/v/homplexity.svg?style=flat)](http://packdeps.haskellers.com/feed?needle=homplexity)
 
 Official releases are on [Hackage](https://hackage.haskell.org/package/homplexity)
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,9 @@
 Changelog
 =========
+    0.4.4.0  Nov 2018
+        * Relax dependencies for GHC up to 8.6
+        * Build as a library
+
     0.4.3.4  July 2016
 
         * Updated for haskell-src-exts-1.18.
diff --git a/homplexity.cabal b/homplexity.cabal
--- a/homplexity.cabal
+++ b/homplexity.cabal
@@ -1,5 +1,5 @@
 name:                homplexity
-version:             0.4.3.4
+version:             0.4.4.0
 synopsis:            Haskell code quality tool
 description:         Homplexity aims to measure code complexity,
                      warning about fragments that might have higher defect probability
@@ -16,30 +16,51 @@
 license-file:        LICENSE
 author:              Michal J. Gajda
 maintainer:          mjgajda@gmail.com
-copyright:           Copyright by Michal J. Gajda '2015-'2016
+copyright:           Copyright by Michal J. Gajda '2015-'2018
 category:            Language, Tools
 build-type:          Simple
 extra-source-files:  README.md changelog.md
 cabal-version:       >=1.10
 bug-reports:         https://github.com/mgajda/homplexity/issues
-tested-with:         GHC==7.10.1,GHC==7.8.4
+tested-with:         GHC==7.8.4
+                   , GHC==7.10.3
+                   , GHC==8.0.2
+                   , GHC==8.2.2
+                   , GHC==8.4.4
+                   , GHC==8.6.2
 
 source-repository head
   type:     git
   location: https://github.com/mgajda/homplexity.git
 
+Library
+  exposed-modules:
+    Language.Haskell.Homplexity.Assessment
+    Language.Haskell.Homplexity.CodeFragment
+    Language.Haskell.Homplexity.Comments
+    Language.Haskell.Homplexity.Cyclomatic
+    Language.Haskell.Homplexity.Message
+    Language.Haskell.Homplexity.Metric
+    Language.Haskell.Homplexity.Parse
+    Language.Haskell.Homplexity.TypeComplexity
+    Language.Haskell.Homplexity.SrcSlice
+  Hs-source-dirs:   .
+  Other-Modules:
+    Paths_homplexity
+  build-depends:       base
+                      ,haskell-src-exts
+                      ,directory
+                      ,filepath
+                      ,hflags
+                      ,uniplate
+                      ,deepseq
+                      ,containers
+                      ,template-haskell
+                      ,cpphs
+  default-language:    Haskell2010
+
 executable homplexity
   main-is:             Homplexity.hs
-  other-modules:       Language.Haskell.Homplexity.Assessment
-                       Language.Haskell.Homplexity.CodeFragment
-                       Language.Haskell.Homplexity.Comments
-                       Language.Haskell.Homplexity.Cyclomatic
-                       Language.Haskell.Homplexity.Message
-                       Language.Haskell.Homplexity.Metric
-                       Language.Haskell.Homplexity.Parse
-                       Language.Haskell.Homplexity.TypeComplexity
-                       Language.Haskell.Homplexity.SrcSlice
-
   other-extensions:    FlexibleContexts,
                        FlexibleInstances,
                        UndecidableInstances,
@@ -56,18 +77,18 @@
                        BangPatterns,
                        GeneralizedNewtypeDeriving,
                        TypeFamilies
-  build-depends:       base             >=4.5  && <4.10,
-                       haskell-src-exts >=1.18 && <1.19,
-                       directory        >=1.1  && <1.3,
+  build-depends:       base             >=4.5  && <4.13,
+                       haskell-src-exts >=1.18 && <1.21,
+                       directory        >=1.1  && <1.4,
                        filepath         >=1.2  && <1.5,
                        hflags           >=0.3  && <0.5,
                        uniplate         >=1.4  && <1.7,
-                       deepseq          >=1.3  && <1.5,
-                       containers       >=0.3  && <0.6,
-                       template-haskell >=2.6  && <2.12,
-                       cpphs            >=1.5  && <1.21
+                       deepseq          >=1.3  && <1.7,
+                       containers       >=0.3  && <0.7,
+                       template-haskell >=2.6  && <2.14,
+                       cpphs            >=1.5  && <1.21,
+                       homplexity
   build-tools:         happy            >= 1.19.0
-  -- hs-source-dirs:      
   default-language:    Haskell2010
 
 test-suite Comments
@@ -76,8 +97,8 @@
                     Language.Haskell.Homplexity.Comments
                     Language.Haskell.Homplexity.SrcSlice
   type:             exitcode-stdio-1.0
-  build-depends:    base             >=4.5  && <4.10,
-                    haskell-src-exts >=1.18 && <1.19,
+  build-depends:    base             >=4.5  && <4.12,
+                    haskell-src-exts >=1.18 && <1.21,
                     uniplate         >=1.4  && <1.7
   default-language: Haskell2010
 
