-- 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