lol-typing-1.20160822: Language/LOL/Typing/Expr/Utils.hs
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Language.LOL.Typing.Expr.Utils where
import Data.Function (($), (.))
import Data.Maybe (Maybe(..))
import Data.String (IsString(..))
import Language.LOL.Typing.Type
import Language.LOL.Typing.Expr.Common
import Language.LOL.Typing.Expr.Grammar
-- Convenient instances
instance IsString Expr where
fromString = Expr_Var . fromString
-- * Convenient 'Expr' constructors
(.->) :: Name -> Expr -> Expr
(.->) = Expr_Abst Nothing
infixr 0 .->
(..->) :: (Name, Monotype) -> Expr -> Expr
(..->) (name, sig) = Expr_Abst (Just sig) name
infixr 0 ..->
(.:) :: Polytypeable sig => Expr -> sig -> Expr
(.:) e = Expr_Annot e . polytype
infixr 0 .:
(.=) :: Name -> Expr -> Expr -> Expr
(.=) = Expr_Let Nothing
infixr 2 .=
(..=) :: Polytypeable sig => (Name, sig) -> Expr -> Expr -> Expr
(..=) (name, sig) = Expr_Let (Just $ polytype sig) name
infixr 2 ..=
(!) :: Expr -> Expr -> Expr
(!) = Expr_App
infixl 5 !
(.$) :: Expr -> Expr -> Expr
(.$) = Expr_App
infixr 3 .$