Skip to content

Commit

Permalink
Parse lambdas
Browse files Browse the repository at this point in the history
  • Loading branch information
elliottt committed Jan 28, 2018
1 parent 105c3b6 commit bcd607e
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
12 changes: 12 additions & 0 deletions src/Dang/Syntax/AST.hs
Expand Up @@ -75,6 +75,7 @@ data ModStruct syn = ModStruct { msMeta :: MetaOf syn
data Decl syn = DBind (MetaOf syn) (Bind syn)
| DSig (MetaOf syn) (Sig syn)
| DData (MetaOf syn) (Data syn)
| DSyn (MetaOf syn) (Syn syn)
| DModBind (MetaOf syn) (IdentOf syn) (ModExpr syn)
| DModType (MetaOf syn) (IdentOf syn) (ModType syn)
deriving (Generic)
Expand All @@ -91,6 +92,13 @@ data Sig syn = Sig { sigMeta :: MetaOf syn
, sigSchema :: SchemaOf syn
} deriving (Generic)

-- | A type synonym.
data Syn syn = Syn { synMeta :: MetaOf syn
, synName :: IdentOf syn
, synParams :: [IdentOf syn]
, synType :: TypeOf syn
} deriving (Generic)

data ModType syn = MTVar (MetaOf syn) (IdentOf syn)
| MTSig (MetaOf syn) (ModSig syn)
| MTFunctor (MetaOf syn) (IdentOf syn) (ModType syn) (ModType syn)
Expand Down Expand Up @@ -193,6 +201,7 @@ deriving instance Cxt Show syn => Show (Expr syn)
deriving instance Cxt Show syn => Show (LetDecl syn)
deriving instance Cxt Show syn => Show (Literal syn)
deriving instance Cxt Show syn => Show (Data syn)
deriving instance Cxt Show syn => Show (Syn syn)
deriving instance Cxt Show syn => Show (Constr syn)

-- front-end specific types and schemas
Expand All @@ -219,6 +228,9 @@ instance HasRange (Bind Parsed) where
instance HasRange (Data Parsed) where
range Data { .. } = dMeta

instance HasRange (Syn Parsed) where
range Syn { .. } = synMeta

instance HasRange (Constr Parsed) where
range Constr { .. } = cMeta

Expand Down
2 changes: 1 addition & 1 deletion src/Dang/Syntax/Lexer.x
Expand Up @@ -70,7 +70,7 @@ $white+ ;
"." { keyword Kdot }
"," { keyword Kcomma }
"_" { keyword Kwild }
"\\" { keyword Klambda }
"\" { keyword Klambda }
-- numbers
$number+ { emits (TNum 10 . read . T.unpack) }
Expand Down
12 changes: 12 additions & 0 deletions src/Dang/Syntax/Parser.y
Expand Up @@ -64,6 +64,7 @@ import Text.Layout.OffSides (Layout(..),layout,wrapToken)
'case' { Keyword Kcase $$ }
'of' { Keyword Kof $$ }

'\\' { Keyword Klambda $$ }
'->' { Keyword Krarrow $$ }

'_' { Keyword Kwild $$ }
Expand Down Expand Up @@ -113,6 +114,7 @@ decl :: { [Decl Parsed] }
: signature { [ DSig (range sig) sig | sig <- $1 ] }
| bind { [DBind (range $1) $1] }
| data_decl { [DData (range $1) $1] }
| type_synonym { [DSyn (range $1) $1] }
| mod_bind { [$1] }
| mod_type_bind { [$1] }

Expand Down Expand Up @@ -247,6 +249,9 @@ expr :: { Expr Parsed }
: list1(aexpr)
{ mkEApp $1 }

| '\\' list1(arg_pat) '->' expr
{ undefined }

| 'let' layout(let_decl) 'in' expr
{ ELet ($1 <-> $4) (concat $2) $4 }

Expand Down Expand Up @@ -294,6 +299,13 @@ data_constr :: { Constr Parsed }
, cName = $1
, cParams = $2 } }

type_synonym :: { Syn Parsed }
: 'type' con list(ident) '=' type
{ Syn { synMeta = $1 <-> $5
, synName = $2
, synParams = $3
, synType = $5 } }


-- Names -----------------------------------------------------------------------

Expand Down

0 comments on commit bcd607e

Please sign in to comment.