git.iko.soy/rowtype-yoga/purescript-native
on 8c17718 help sign in
47 lines 1.5 kB history raw
1-----------------------------------------------------------------------------
2--
3-- Module : PureScript.Parser.Declarations
4-- Copyright : (c) Phil Freeman 2013
5-- License : MIT
6--
7-- Maintainer : Phil Freeman <paf31@cantab.net>
8-- Stability : experimental
9-- Portability :
10--
11-- |
12--
13-----------------------------------------------------------------------------
15module PureScript.Parser.Declarations (
16 parseDeclaration,
17 parseDeclarations
18) where
20import PureScript.Values
21import PureScript.Types
22import PureScript.Parser.Common
23import Control.Applicative
24import qualified Text.Parsec as P
25import Control.Arrow (Arrow(..))
26import PureScript.Declarations
27import PureScript.Parser.Values
28import PureScript.Parser.Types
30parseDataDeclaration :: P.Parsec String () Declaration
31parseDataDeclaration = do
32 reserved "data"
33 name <- properName
34 tyArgs <- many identifier
35 lexeme $ P.char '='
36 ctors <- P.sepBy1 ((,) <$> properName <*> parseType) (lexeme $ P.char '|')
37 return $ DataDeclaration $ DataConstructors name tyArgs ctors
39parseValueDeclaration :: P.Parsec String () Declaration
40parseValueDeclaration = ValueDeclaration <$> identifier <*> (lexeme (P.char '=') *> parseValue)
42parseDeclaration :: P.Parsec String () Declaration
43parseDeclaration = parseDataDeclaration
44 P.<|> parseValueDeclaration
46parseDeclarations :: P.Parsec String () [Declaration]
47parseDeclarations = whiteSpace *> P.sepEndBy parseDeclaration semi <* P.eof