packages feed

lol-typing-1.20160822: Language/LOL/Typing/Expr/Grammar.ag

-- vim: syntax=haskell
optpragmas {
{-# LANGUAGE OverloadedStrings #-}
}
module {Language.LOL.Typing.Expr.Grammar} {} {
import Data.Maybe (Maybe(..))
import Text.Show (Show)

import Language.LOL.Typing.Type
import Language.LOL.Typing.Expr.Common
}

data Expr
 | Var
	name :: Name
 | Abst -- ^ Monomorphic bind
	sig  :: {Maybe Monotype}
	name :: Name
	body :: Expr
 | App
	abst :: Expr
	arg  :: Expr
 | Annot
	body :: Expr
	sig  :: Polytype
 | Let -- ^ Polymorphic bind
	sig  :: {Maybe Polytype}
	name :: Name
	decl :: Expr
	body :: Expr
 | Where
	sig  :: {Maybe Polytype}
	name :: Name
	decl :: Expr
	body :: Expr
deriving Expr : Show

data Decl
 | Let
	sig  :: {Maybe Monotype}
	name :: Name
	decl :: Expr
deriving Decl : Show