{-# 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 .$