@@ -14,7 +14,7 @@
1414-----------------------------------------------------------------------------
1515
1616{-# LANGUAGE GeneralizedNewtypeDeriving, FlexibleInstances, RankNTypes,
17− MultiParamTypeClasses, FlexibleContexts #-}
17+ MultiParamTypeClasses, FlexibleContexts, GADTs #-}
1818
1919module Language.PureScript.TypeChecker.Monad where
2020
@@ -23,7 +23,6 @@ import qualified Data.Map as M
2323
2424import Control.Applicative
2525import Control.Monad.Except
26−import Control.Monad.Error (Error(..))
2726import Control.Monad.Reader.Class
2827import Control.Monad.State
2928import Control.Monad.Unify
@@ -110,7 +109,7 @@ makeBindingGroupVisible action = do
110109-- |
111110-- Lookup the type of a value by name in the @Environment@
112111--
113−lookupVariable :: (Error e, Functor m, MonadState CheckState m, MonadError e m) => ModuleName -> Qualified Ident -> m Type
112+lookupVariable :: (e ~ ErrorStack, Functor m, MonadState CheckState m, MonadError e m) => ModuleName -> Qualified Ident -> m Type
114113lookupVariable currentModule (Qualified moduleName var) = do
115114 env <- getEnv
116115 case M.lookup (fromMaybe currentModule moduleName, var) (names env) of
@@ -120,7 +119,7 @@ lookupVariable currentModule (Qualified moduleName var) = do
120119-- |
121120-- Lookup the visibility of a value by name in the @Environment@
122121--
123−getVisibility :: (Error e, Functor m, MonadState CheckState m, MonadError e m) => ModuleName -> Qualified Ident -> m NameVisibility
122+getVisibility :: (e ~ ErrorStack, Functor m, MonadState CheckState m, MonadError e m) => ModuleName -> Qualified Ident -> m NameVisibility
124123getVisibility currentModule (Qualified moduleName var) = do
125124 env <- getEnv
126125 case M.lookup (fromMaybe currentModule moduleName, var) (names env) of
@@ -130,7 +129,7 @@ getVisibility currentModule (Qualified moduleName var) = do
130129-- |
131130-- Assert that a name is visible
132131--
133−checkVisibility :: (Error e, Functor m, MonadState CheckState m, MonadError e m) => ModuleName -> Qualified Ident -> m ()
132+checkVisibility :: (e ~ ErrorStack, Functor m, MonadState CheckState m, MonadError e m) => ModuleName -> Qualified Ident -> m ()
134133checkVisibility currentModule name@(Qualified _ var) = do
135134 vis <- getVisibility currentModule name
136135 case vis of
@@ -140,7 +139,7 @@ checkVisibility currentModule name@(Qualified _ var) = do
140139-- |
141140-- Lookup the kind of a type by name in the @Environment@
142141--
143−lookupTypeVariable :: (Error e, Functor m, MonadState CheckState m, MonadError e m) => ModuleName -> Qualified ProperName -> m Kind
142+lookupTypeVariable :: (e ~ ErrorStack, Functor m, MonadState CheckState m, MonadError e m) => ModuleName -> Qualified ProperName -> m Kind
144143lookupTypeVariable currentModule (Qualified moduleName name) = do
145144 env <- getEnv
146145 case M.lookup (Qualified (Just $ fromMaybe currentModule moduleName) name) (types env) of
@@ -173,7 +172,7 @@ data CheckState = CheckState {
173172-- The type checking monad, which provides the state of the type checker, and error reporting capabilities
174173--
175174newtype Check a = Check { unCheck :: StateT CheckState (Either ErrorStack) a }
176− deriving (Functor, Monad, Applicative, Alternative, MonadPlus, MonadState CheckState, MonadError ErrorStack)
175+ deriving (Functor, Monad, Applicative, MonadState CheckState, MonadError ErrorStack)
177176
178177-- |
179178-- Get the current @Environment@