-- GeNeRaTeD fOr: ../../CBS/Funcons/Computations/Control flow/Normal/Choosing/if-then-else.aterm {-# LANGUAGE OverloadedStrings #-} module Funcons.Core.Computations.ControlFlow.Normal.Choosing.IfThenElse where import Funcons.EDSL entities = [] types = typeEnvFromList [] funcons = libFromList [("if-then-else",PartiallyStrictFuncon [Strict,NonStrict,NonStrict] stepIf_then_else)] -- | -- /if-then-else(B,X,Y)/ first evaluates /B/ . -- Depending on whether the computed value is /true/ or /false/ , -- it then evaluates /X/ or /Y/ . if_then_else_ fargs = FApp "if-then-else" (FTuple fargs) stepIf_then_else fargs@[arg1,arg2,arg3] = evalRules [rewrite1,rewrite2] [] where rewrite1 = do let env = emptyEnv env <- fsMatch fargs [PValue (PADT "true" []),PMetaVar "X",PWildCard] env rewriteTermTo (TVar "X") env rewrite2 = do let env = emptyEnv env <- fsMatch fargs [PValue (PADT "false" []),PWildCard,PMetaVar "Y"] env rewriteTermTo (TVar "Y") env stepIf_then_else fargs = sortErr (FApp "if-then-else" (FTuple fargs)) "invalid number of arguments"