
Heinrich Apfelmus wrote:
Tom Poliquin wrote:
Heinrich Apfelmus wrote:
You probably want guards, like this
fib n
| n == 0 = 0 | n == 1 = 1 | otherwise = fib (n-1) + fib (n-2)
Is this what you had in mind?
module Main where
foo a b c
| p1 && p2 || not p3 = 42 | p1 || not p2 && p3 = 13 | otherwise = 0
where -- setup if predicates p1 = a > b p2 = a + b > 2 p3 = a - b < 1
main = do x <- return $ foo 9 2 3 print x
-- 42
Yes.
Of course, it will become clunky very quickly; only abstraction and insights into the problem domain can help in these cases.
ay, there's the rub! (Hamlet Act III, Scene I) Those pesky insights into the problem ! If I have time I'll try all three approaches; guards,FSM, and insights. Thanks everyone for the help! Tom