on ca2be8a help sign in
elk/src/Elm/Header.hs
73 lines 1.3 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module Elm.Header
3 ( Tag(..)
4 , parse
5 )
6 where
9import qualified Data.ByteString as B
11import qualified AST.Source as Src
12import qualified Elm.Compiler.Module as M
13import qualified Elm.Name as N
14import qualified Elm.Package as Pkg
15import qualified Parse.Primitives as Parser
16import qualified Parse.Module as Module
17import qualified Reporting.Annotation as A
18import qualified Reporting.Error as Error
22-- HEADER TAGS
25data Tag = Normal | Effect | Port
29-- PARSE
32parse :: Pkg.Name -> B.ByteString -> Either Error.Error (Maybe (Tag, M.Raw), [M.Raw])
33parse pkgName sourceCode =
34 let
35 headerParser =
36 Module.module_ pkgName (return ())
37 in
38 case Parser.run headerParser sourceCode of
39 Right (Src.Module header imports _) ->
40 Right
41 ( fmap simplifyHeader header
42 , map getName imports
43 )
45 Left err ->
46 Left (Error.Syntax err)
49getName :: Src.Import -> N.Name
50getName (Src.Import (A.At _ name) _ _) =
51 name
55-- TO HEADER
58simplifyHeader :: Src.Header -> (Tag, N.Name)
59simplifyHeader (Src.Header name effects _ _) =
60 ( toTag effects, name )
63toTag :: Src.Effects -> Tag
64toTag effects =
65 case effects of
66 Src.NoEffects ->
67 Normal
69 Src.Ports _ ->
70 Port
72 Src.Manager _ _ ->
73 Effect