@@ -1,6 +1,11 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3−module Validate (Result, validate) where
3+module Validate
5import Control.Applicative (liftA2)
10import Control.Applicative (liftA2)
6import Control.Monad (forM_)
11import Control.Monad (forM_)
@@ -9,7 +14,6 @@ import Data.Text (Text)
10import qualified AST.Expression.Source as Src
15import qualified AST.Expression.Source as Src
11import qualified AST.Expression.Valid as Valid
16import qualified AST.Expression.Valid as Valid
12−import qualified AST.Pattern as Pattern
13import qualified AST.Type as Type
17import qualified AST.Type as Type
14import qualified Elm.Name as N
18import qualified Elm.Name as N
15import qualified Reporting.Annotation as A
19import qualified Reporting.Annotation as A
@@ -19,7 +23,6 @@ import qualified Reporting.Result as Result
23-- VALIDATE
26-- VALIDATE
@@ -260,22 +263,23 @@ definitions sourceDefs =
261 A.A annRegion (Src.Annotate annotationName tipe) : otherDefs ->
264 A.A annRegion (Src.Annotate annotationName tipe) : otherDefs ->
262 case otherDefs of
265 case otherDefs of
263− A.A defRegion (Src.Define name args expr) : otherOtherDefs | name == annotationName ->
266+ A.A defRegion (Src.Define name@(A.A _ definitionName) args expr) : otherOtherDefs
267+ | definitionName == annotationName ->
265− <$> validateDefinition (R.merge annRegion defRegion) name args expr (Just tipe)
269+ <$> validateDefinition (R.merge annRegion defRegion) name args expr (Just tipe)
266− <*> definitions otherOtherDefs
270+ <*> definitions otherOtherDefs
269 Result.throw annRegion (Error.TypeWithoutDefinition annotationName)
273 Result.throw annRegion (Error.TypeWithoutDefinition annotationName)
272−validateDefinition :: R.Region -> Text -> [Pattern.Raw] -> Src.Expr -> Maybe Type.Raw -> Result w Valid.Def
276+validateDefinition :: R.Region -> A.Located Text -> [Src.Pattern] -> Src.Expr -> Maybe Type.Raw -> Result w Valid.Def
273validateDefinition region name args expr maybeType =
277validateDefinition region name args expr maybeType =
274 do validExpr <- expression expr
278 do validExpr <- expression expr
275 return $ Valid.Define region name args validExpr maybeType
279 return $ Valid.Define region name args validExpr maybeType
278−validateDestruct :: R.Region -> Pattern.Raw -> Src.Expr -> Result w Valid.Def
282+validateDestruct :: R.Region -> Src.Pattern -> Src.Expr -> Result w Valid.Def
279validateDestruct region pattern expr =
283validateDestruct region pattern expr =
280 Valid.Destruct region pattern <$> expression expr
284 Valid.Destruct region pattern <$> expression expr