@@ -25,9 +25,8 @@ module Language.PureScript.Sugar.TypeDeclarations (
2525#if __GLASGOW_HASKELL__ < 710
2626import Control.Applicative
2727#endif
28−import Control.Monad (forM, when)
28+import Control.Monad (forM)
2929import Control.Monad.Error.Class (MonadError(..))
30−import Control.Monad.Writer.Class (MonadWriter(tell))
3130
3231import Language.PureScript.Crash
3332import Language.PureScript.AST
@@ -39,19 +38,19 @@ import Language.PureScript.Traversals
3938-- |
4039-- Replace all top level type declarations in a module with type annotations
4140--
42−desugarTypeDeclarationsModule :: forall m. (Functor m, Applicative m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) => [Module] -> m [Module]
41+desugarTypeDeclarationsModule :: forall m. (Functor m, Applicative m, MonadError MultipleErrors m) => [Module] -> m [Module]
4342desugarTypeDeclarationsModule ms = forM ms $ \(Module ss coms name ds exps) ->
4443 rethrow (addHint (ErrorInModule name)) $
45− Module ss coms name <$> desugarTypeDeclarations True ds <*> pure exps
44+ Module ss coms name <$> desugarTypeDeclarations ds <*> pure exps
4645 where
4746
48− desugarTypeDeclarations :: Bool -> [Declaration] -> m [Declaration]
49− desugarTypeDeclarations reqd (PositionedDeclaration pos com d : ds) = do
50− (d' : ds') <- rethrowWithPosition pos $ desugarTypeDeclarations reqd (d : ds)
47+ desugarTypeDeclarations :: [Declaration] -> m [Declaration]
48+ desugarTypeDeclarations (PositionedDeclaration pos com d : ds) = do
49+ (d' : ds') <- rethrowWithPosition pos $ desugarTypeDeclarations (d : ds)
5150 return (PositionedDeclaration pos com d' : ds')
52− desugarTypeDeclarations reqd (TypeDeclaration name ty : d : rest) = do
51+ desugarTypeDeclarations (TypeDeclaration name ty : d : rest) = do
5352 (_, nameKind, val) <- fromValueDeclaration d
54− desugarTypeDeclarations reqd (ValueDeclaration name nameKind [] (Right (TypedValue True val ty)) : rest)
53+ desugarTypeDeclarations (ValueDeclaration name nameKind [] (Right (TypedValue True val ty)) : rest)
5554 where
5655 fromValueDeclaration :: Declaration -> m (Ident, NameKind, Expr)
5756 fromValueDeclaration (ValueDeclaration name' nameKind [] (Right val)) | name == name' = return (name', nameKind, val)
@@ -59,19 +58,14 @@ desugarTypeDeclarationsModule ms = forM ms $ \(Module ss coms name ds exps) ->
5958 (ident, nameKind, val) <- rethrowWithPosition pos $ fromValueDeclaration d'
6059 return (ident, nameKind, PositionedValue pos com val)
6160 fromValueDeclaration _ = throwError . errorMessage $ OrphanTypeDeclaration name
62− desugarTypeDeclarations _ [TypeDeclaration name _] = throwError . errorMessage $ OrphanTypeDeclaration name
63− desugarTypeDeclarations reqd (ValueDeclaration name nameKind bs val : rest) = do
64− -- At the top level, match a type signature or emit a warning.
65− when reqd $ case val of
66− Right TypedValue{} -> return ()
67− Left _ -> internalError "desugarTypeDeclarations: cases were not desugared"
68− _ -> tell (addHint (ErrorInValueDeclaration name) $ errorMessage $ MissingTypeDeclaration name)
61+ desugarTypeDeclarations [TypeDeclaration name _] = throwError . errorMessage $ OrphanTypeDeclaration name
62+ desugarTypeDeclarations (ValueDeclaration name nameKind bs val : rest) = do
6963 let (_, f, _) = everywhereOnValuesTopDownM return go return
7064 f' (Left gs) = Left <$> mapM (pairM return f) gs
7165 f' (Right v) = Right <$> f v
72− (:) <$> (ValueDeclaration name nameKind bs <$> f' val) <*> desugarTypeDeclarations reqd rest
66+ (:) <$> (ValueDeclaration name nameKind bs <$> f' val) <*> desugarTypeDeclarations rest
7367 where
74− go (Let ds val') = Let <$> desugarTypeDeclarations False ds <*> pure val'
68+ go (Let ds val') = Let <$> desugarTypeDeclarations ds <*> pure val'
7569 go other = return other
76− desugarTypeDeclarations reqd (d:ds) = (:) d <$> desugarTypeDeclarations reqd ds
77− desugarTypeDeclarations _ [] = return []
70+ desugarTypeDeclarations (d:ds) = (:) d <$> desugarTypeDeclarations ds
71+ desugarTypeDeclarations [] = return []