
If you have a long if/else if/else chain, you might consider a trivial case statement with guards. Whether you think this is attractive is a matter of taste, but it has the fall-through semantics you want and ghc optimizes the _ pattern matching away: f x = case () of _| x == 2 -> 22 _| x == 4 -> 44 _| x == 7 -> 77 _| otherwise -> 55
f 4 44 f 9 55
michael rice wrote:
Thanks guys,
I understand what you're telling me, but have some nested IFs and just want to fall through on one of the ELSES but then I end up with two ELSES in a row and nothing between them. Oh, well, on to restructuring.
Michael
--- On *Wed, 10/21/09, Tim Wawrzynczak /
/* wrote: From: Tim Wawrzynczak
Subject: Re: [Haskell-cafe] Is there a null statement that does nothing? To: "michael rice" Cc: haskell-cafe@haskell.org Date: Wednesday, October 21, 2009, 8:49 PM Yes, an if statement must have both 'then' and 'else' branches. As an example, what if you had
let a = if b == 2 then True else False
and you were missing an else branch? What would 'a' get assigned to?
The if statement "returns" a value so must have both branches.
However, in a monadic constraint, there are the functions 'when' and 'unless.' They allow conditional evaluation of expressions in a monadic context. For example,
main = do line <- getLine when (line == "hello") putStrLn "Hello back!"
Cheers, - Tim
On Wed, Oct 21, 2009 at 7:43 PM, michael rice
> wrote: It looks like both the THEN and the ELSE in an IF expression must each have an expression. What's a graceful way to do nothing in either or both slots, kind of like the Fortran CONTINUE statement.
--mr
================
[michael@localhost ~]$ ghci GHCi, version 6.10.3: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer ... linking ... done. Loading package base ... linking ... done. Prelude> if (1==1) then else
<interactive>:1:15: parse error on input `else' Prelude> if (1==1) then True else
<interactive>:1:24: parse error (possibly incorrect indentation) Prelude> if (1==1) then True else False True Prelude>
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe