Skip to content

Commit 7cd8e64

Browse files
committed
Tidying, add kind traversal
1 parent b578d26 commit 7cd8e64

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

src/Language/PureScript/Errors.hs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -255,21 +255,24 @@ errorMessage err = MultipleErrors [err]
255255
onErrorMessages :: (ErrorMessage -> ErrorMessage) -> MultipleErrors -> MultipleErrors
256256
onErrorMessages f = MultipleErrors . map f . runMultipleErrors
257257

258+
-- | The various types of things which might need to be relabelled in errors messages.
259+
data LabelType = TypeLabel | SkolemLabel String deriving (Show, Eq, Ord)
260+
258261
-- | A map from rigid type variable name/unknown variable pairs to new variables.
259-
type UnknownMap = M.Map (Maybe String, Unknown) Unknown
262+
type UnknownMap = M.Map (LabelType, Unknown) Unknown
260263

261264
replaceUnknowns :: Type -> State UnknownMap Type
262-
replaceUnknowns = everywhereOnTypesM replaceUnknowns'
265+
replaceUnknowns = everywhereOnTypesM replaceTypes
263266
where
264-
lookupTable :: (Maybe String, Unknown) -> UnknownMap -> (Unknown, UnknownMap)
265-
lookupTable x m = case M.lookup x m of
266-
Nothing -> let i = length (filter (on (==) fst x) (M.keys m)) in (i, M.insert x i m)
267-
Just i -> (i, m)
268-
269-
replaceUnknowns' :: Type -> State UnknownMap Type
270-
replaceUnknowns' (TUnknown u) = state $ first TUnknown . lookupTable (Nothing, u)
271-
replaceUnknowns' (Skolem name s sko) = state $ first (flip (Skolem name) sko) . lookupTable (Just name, s)
272-
replaceUnknowns' other = return other
267+
lookupTable :: (LabelType, Unknown) -> UnknownMap -> (Unknown, UnknownMap)
268+
lookupTable x m = case M.lookup x m of
269+
Nothing -> let i = length (filter (on (==) fst x) (M.keys m)) in (i, M.insert x i m)
270+
Just i -> (i, m)
271+
272+
replaceTypes :: Type -> State UnknownMap Type
273+
replaceTypes (TUnknown u) = state $ first TUnknown . lookupTable (TypeLabel, u)
274+
replaceTypes (Skolem name s sko) = state $ first (flip (Skolem name) sko) . lookupTable (SkolemLabel name, s)
275+
replaceTypes other = return other
273276

274277
onTypesInErrorMessageM :: (Applicative m) => (Type -> m Type) -> ErrorMessage -> m ErrorMessage
275278
onTypesInErrorMessageM f = g

src/Language/PureScript/Kinds.hs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ module Language.PureScript.Kinds where
1818

1919
import Data.Data
2020

21+
import Control.Applicative
2122
import Control.Monad.Unify (Unknown)
2223

2324
-- |
@@ -52,6 +53,13 @@ everywhereOnKinds f = go
5253
go (FunKind k1 k2) = f (FunKind (go k1) (go k2))
5354
go other = f other
5455

56+
everywhereOnKindsM :: (Functor m, Applicative m, Monad m) => (Kind -> m Kind) -> Kind -> m Kind
57+
everywhereOnKindsM f = go
58+
where
59+
go (Row k1) = (Row <$> go k1) >>= f
60+
go (FunKind k1 k2) = (FunKind <$> go k1 <*> go k2) >>= f
61+
go other = f other
62+
5563
everythingOnKinds :: (r -> r -> r) -> (Kind -> r) -> Kind -> r
5664
everythingOnKinds (<>) f = go
5765
where

0 commit comments

Comments
 (0)