-- The lambda-calculus part of the language, which can be shared
module Language.Hakaru.Lambda(lit, dbl, lam, app, fix, ifThenElse) where

lit :: (Eq a) => a -> a
lit = id

-- raw lit is a pain to use.  These are nicer
dbl :: Double -> Double
dbl = lit

lam :: (a -> b) -> (a -> b)
lam f = f

app :: (a -> b) -> a -> b
app f x = f x

fix :: ((a -> b) -> (a -> b)) -> (a -> b)
fix g = f where f = g f

ifThenElse :: Bool -> a -> a -> a
ifThenElse True  t _ = t
ifThenElse False _ f = f