module Language.Lambda (
LambdaExpr(..),
PrettyPrint(..),
evalExpr,
evalString,
parseExpr,
uniques,
) where
import Control.Monad
import Text.Parsec
import Language.Lambda.Eval
import Language.Lambda.Expression
import Language.Lambda.Parser
import Language.Lambda.PrettyPrint
evalString :: String -> Either ParseError (LambdaExpr String)
evalString = liftM (evalExpr uniques) . parseExpr
-- TODO[sgillespie]: Uniques should be [a..z, a0..z0, a1..z1] etc
-- concatMap (\x -> map (\y -> y:x) ['a'..'z']) ([""] ++ map show [0..])
uniques :: [String]
uniques = concatMap (\p -> map (:p) . reverse $ ['a'..'z']) suffix
where suffix = [""] ++ map show [(0::Int)..]