@@ -14,7 +14,7 @@
14-----------------------------------------------------------------------------
14-----------------------------------------------------------------------------
16{-# LANGUAGE GeneralizedNewtypeDeriving, FlexibleInstances, RankNTypes,
16{-# LANGUAGE GeneralizedNewtypeDeriving, FlexibleInstances, RankNTypes,
17− MultiParamTypeClasses, FlexibleContexts #-}
17+ MultiParamTypeClasses, FlexibleContexts, GADTs #-}
19module Language.PureScript.TypeChecker.Monad where
19module Language.PureScript.TypeChecker.Monad where
@@ -23,7 +23,6 @@ import qualified Data.Map as M
24import Control.Applicative
24import Control.Applicative
25import Control.Monad.Except
25import Control.Monad.Except
26−import Control.Monad.Error (Error(..))
27import Control.Monad.Reader.Class
26import Control.Monad.Reader.Class
28import Control.Monad.State
27import Control.Monad.State
29import Control.Monad.Unify
28import Control.Monad.Unify
@@ -110,7 +109,7 @@ makeBindingGroupVisible action = do
111-- Lookup the type of a value by name in the @Environment@
110-- Lookup the type of a value by name in the @Environment@
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
114lookupVariable currentModule (Qualified moduleName var) = do
113lookupVariable currentModule (Qualified moduleName var) = do
115 env <- getEnv
114 env <- getEnv
116 case M.lookup (fromMaybe currentModule moduleName, var) (names env) of
115 case M.lookup (fromMaybe currentModule moduleName, var) (names env) of
@@ -120,7 +119,7 @@ lookupVariable currentModule (Qualified moduleName var) = do
121-- Lookup the visibility of a value by name in the @Environment@
120-- Lookup the visibility of a value by name in the @Environment@
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
124getVisibility currentModule (Qualified moduleName var) = do
123getVisibility currentModule (Qualified moduleName var) = do
125 env <- getEnv
124 env <- getEnv
126 case M.lookup (fromMaybe currentModule moduleName, var) (names env) of
125 case M.lookup (fromMaybe currentModule moduleName, var) (names env) of
@@ -130,7 +129,7 @@ getVisibility currentModule (Qualified moduleName var) = do
131-- Assert that a name is visible
130-- Assert that a name is visible
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 ()
134checkVisibility currentModule name@(Qualified _ var) = do
133checkVisibility currentModule name@(Qualified _ var) = do
135 vis <- getVisibility currentModule name
134 vis <- getVisibility currentModule name
136 case vis of
135 case vis of
@@ -140,7 +139,7 @@ checkVisibility currentModule name@(Qualified _ var) = do
141-- Lookup the kind of a type by name in the @Environment@
140-- Lookup the kind of a type by name in the @Environment@
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
144lookupTypeVariable currentModule (Qualified moduleName name) = do
143lookupTypeVariable currentModule (Qualified moduleName name) = do
145 env <- getEnv
144 env <- getEnv
146 case M.lookup (Qualified (Just $ fromMaybe currentModule moduleName) name) (types env) of
145 case M.lookup (Qualified (Just $ fromMaybe currentModule moduleName) name) (types env) of
@@ -173,7 +172,7 @@ data CheckState = CheckState {
173-- The type checking monad, which provides the state of the type checker, and error reporting capabilities
172-- The type checking monad, which provides the state of the type checker, and error reporting capabilities
175newtype Check a = Check { unCheck :: StateT CheckState (Either ErrorStack) a }
174newtype 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)
179-- Get the current @Environment@
178-- Get the current @Environment@