diff --git a/Language/Symantic/Lib/Char.hs b/Language/Symantic/Lib/Char.hs
--- a/Language/Symantic/Lib/Char.hs
+++ b/Language/Symantic/Lib/Char.hs
@@ -3,6 +3,15 @@
 -- | Symantic for 'Char'.
 module Language.Symantic.Lib.Char where
 
+import Data.Char (Char)
+import Data.Eq (Eq)
+import Data.Function (($), (.))
+import Data.Functor ((<$>), (<$))
+import Data.Maybe (Maybe(..))
+import Data.Ord (Ord)
+import Data.String (String)
+import Prelude (Bounded, Enum)
+import Text.Show (Show(..))
 import qualified Data.Char as Char
 import qualified Data.Text as Text
 
diff --git a/Language/Symantic/Lib/IO.hs b/Language/Symantic/Lib/IO.hs
--- a/Language/Symantic/Lib/IO.hs
+++ b/Language/Symantic/Lib/IO.hs
@@ -3,6 +3,15 @@
 -- | Symantic for 'IO'.
 module Language.Symantic.Lib.IO where
 
+import Control.Applicative (Applicative)
+import Control.Monad (Monad)
+import Data.Eq (Eq)
+import Data.Function (($))
+import Data.Functor (Functor)
+import Data.Maybe (Maybe(..))
+import Data.Ord (Ord)
+import Prelude (Enum)
+import System.IO (IO, FilePath)
 import qualified Data.MonoTraversable as MT
 import qualified System.IO as IO
 
diff --git a/Language/Symantic/Lib/If.hs b/Language/Symantic/Lib/If.hs
--- a/Language/Symantic/Lib/If.hs
+++ b/Language/Symantic/Lib/If.hs
@@ -3,6 +3,8 @@
 -- | Symantic for @If@.
 module Language.Symantic.Lib.If where
 
+import Data.Bool
+import Data.Function (($))
 import qualified Data.Text as Text
 
 import Language.Symantic
diff --git a/Language/Symantic/Lib/Int.hs b/Language/Symantic/Lib/Int.hs
--- a/Language/Symantic/Lib/Int.hs
+++ b/Language/Symantic/Lib/Int.hs
@@ -3,6 +3,13 @@
 -- | Symantic for 'Int'.
 module Language.Symantic.Lib.Int where
 
+import Data.Eq (Eq)
+import Data.Function (($), (.))
+import Data.Int (Int)
+import Data.Maybe (Maybe(..))
+import Data.Ord (Ord)
+import Prelude (Bounded, Enum, Integral, Num, Real)
+import Text.Show (Show(..))
 import qualified Data.Text as Text
 
 import Language.Symantic
diff --git a/Language/Symantic/Lib/Integer.hs b/Language/Symantic/Lib/Integer.hs
--- a/Language/Symantic/Lib/Integer.hs
+++ b/Language/Symantic/Lib/Integer.hs
@@ -3,6 +3,14 @@
 -- | Symantic for 'Integer'.
 module Language.Symantic.Lib.Integer where
 
+import Data.Eq (Eq)
+import Data.Function (($), (.))
+import Data.Functor ((<$>))
+import Data.Maybe (Maybe(..))
+import Data.Ord (Ord)
+import Prelude (Enum, Integer, Integral, Num, Real)
+import Text.Show (Show(..))
+import Text.Read (read)
 import qualified Data.Text as Text
 
 import Language.Symantic
diff --git a/Language/Symantic/Lib/Map.hs b/Language/Symantic/Lib/Map.hs
--- a/Language/Symantic/Lib/Map.hs
+++ b/Language/Symantic/Lib/Map.hs
@@ -3,8 +3,18 @@
 -- | Symantic for 'Map'.
 module Language.Symantic.Lib.Map where
 
+import Data.Bool
+import Data.Eq (Eq)
+import Data.Foldable (Foldable)
+import Data.Function (($))
+import Data.Functor (Functor)
 import Data.Map.Strict (Map)
+import Data.Maybe (Maybe(..))
 import Data.MonoTraversable (MonoFunctor)
+import Data.Monoid (Monoid)
+import Data.Ord (Ord)
+import Data.Traversable (Traversable)
+import Text.Show (Show)
 import qualified Data.Map.Strict as Map
 
 import Language.Symantic
diff --git a/Language/Symantic/Lib/MonoFoldable.hs b/Language/Symantic/Lib/MonoFoldable.hs
--- a/Language/Symantic/Lib/MonoFoldable.hs
+++ b/Language/Symantic/Lib/MonoFoldable.hs
@@ -3,6 +3,10 @@
 -- | Symantic for 'MonoFoldable'.
 module Language.Symantic.Lib.MonoFoldable where
 
+import Data.Bool
+import Data.Function (($), (.))
+import Data.Monoid (Monoid)
+import Data.Int (Int)
 import Data.MonoTraversable (MonoFoldable)
 import qualified Data.MonoTraversable as MT
 
diff --git a/Language/Symantic/Lib/MonoFunctor.hs b/Language/Symantic/Lib/MonoFunctor.hs
--- a/Language/Symantic/Lib/MonoFunctor.hs
+++ b/Language/Symantic/Lib/MonoFunctor.hs
@@ -3,6 +3,8 @@
 -- | Symantic for 'MonoFunctor'.
 module Language.Symantic.Lib.MonoFunctor where
 
+import Data.Function (($))
+import Data.Maybe (Maybe(..))
 import Data.MonoTraversable (MonoFunctor)
 import qualified Data.MonoTraversable as MT
 
diff --git a/Language/Symantic/Lib/Ratio.hs b/Language/Symantic/Lib/Ratio.hs
--- a/Language/Symantic/Lib/Ratio.hs
+++ b/Language/Symantic/Lib/Ratio.hs
@@ -3,7 +3,13 @@
 -- | Symantic for 'Ratio'.
 module Language.Symantic.Lib.Ratio where
 
+import Data.Eq (Eq)
+import Data.Function (($))
+import Data.Maybe (Maybe(..))
+import Data.Ord (Ord)
 import Data.Ratio (Ratio)
+import Prelude (Fractional, Integral, Num, Real, RealFrac)
+import Text.Show (Show)
 import qualified Data.Ratio as Ratio
 
 import Language.Symantic
diff --git a/Language/Symantic/Lib/Semigroup.hs b/Language/Symantic/Lib/Semigroup.hs
--- a/Language/Symantic/Lib/Semigroup.hs
+++ b/Language/Symantic/Lib/Semigroup.hs
@@ -3,7 +3,9 @@
 -- | Symantic for 'Semigroup'.
 module Language.Symantic.Lib.Semigroup where
 
+import Data.Function (($))
 import Data.Semigroup (Semigroup)
+import Prelude (Integral)
 import qualified Data.Semigroup as Semigroup
 
 import Language.Symantic
diff --git a/Language/Symantic/Lib/Text.hs b/Language/Symantic/Lib/Text.hs
--- a/Language/Symantic/Lib/Text.hs
+++ b/Language/Symantic/Lib/Text.hs
@@ -3,7 +3,13 @@
 -- | Symantic for 'Text'.
 module Language.Symantic.Lib.Text where
 
+import Data.Eq (Eq)
+import Data.Function (($), (.))
+import Data.Maybe (Maybe(..))
+import Data.Monoid (Monoid)
+import Data.Ord (Ord)
 import Data.Text (Text)
+import Text.Show (Show(..))
 import qualified Data.MonoTraversable as MT
 import qualified Data.Sequences as Seqs
 import qualified Data.Text as Text
diff --git a/Language/Symantic/Lib/Unit.hs b/Language/Symantic/Lib/Unit.hs
--- a/Language/Symantic/Lib/Unit.hs
+++ b/Language/Symantic/Lib/Unit.hs
@@ -3,6 +3,16 @@
 -- | Symantic for '()'.
 module Language.Symantic.Lib.Unit where
 
+import Control.Applicative ((<*))
+import Data.Eq (Eq)
+import Data.Function (($))
+import Data.Functor ((<$))
+import Data.Maybe (Maybe(..))
+import Data.Monoid (Monoid)
+import Data.Ord (Ord)
+import Prelude (Bounded, Enum)
+import Text.Show (Show)
+
 import Language.Symantic
 import Language.Symantic.Grammar
 
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,4 +1,4 @@
-resolver: lts-10.5
+resolver: lts-12.8
 packages:
 - '.'
 - location: '../symantic'
@@ -7,7 +7,5 @@
   extra-dep: true
 - location: '../symantic-document'
   extra-dep: true
-- location: '../monad-classes'
-  extra-dep: true
 extra-deps:
-- peano-0.1.0.1
+- monad-classes-0.3.2.2
diff --git a/symantic-lib.cabal b/symantic-lib.cabal
--- a/symantic-lib.cabal
+++ b/symantic-lib.cabal
@@ -2,7 +2,7 @@
 -- PVP:  +-+------- breaking API changes
 --       | | +----- non-breaking API additions
 --       | | | +--- code changes with no API change
-version: 0.0.3.20180213
+version: 0.0.4.20180831
 category: Language
 synopsis: Symantics for common types.
 description: Symantics for common types,
@@ -21,7 +21,7 @@
 extra-source-files:
   stack.yaml
 extra-tmp-files:
-tested-with: GHC==8.2.2
+tested-with: GHC==8.4.3
 
 Source-Repository head
   location: git://git.autogeree.net/symantic
@@ -74,6 +74,7 @@
     LambdaCase
     MultiParamTypeClasses
     NamedFieldPuns
+    NoImplicitPrelude
     OverloadedStrings
     Rank2Types
     ScopedTypeVariables
