#836: rebindable if-then-else syntax
----------------------------------+-----------------------------------------
Reporter: nibro | Owner:
Type: feature request | Status: new
Priority: normal | Milestone: _|_
Component: Compiler (Parser) | Version: 6.13
Keywords: | Testcase: N/A
Blockedby: | Difficulty: Unknown
Os: Unknown/Multiple | Blocking:
Architecture: Unknown/Multiple | Failure: None/Unknown
----------------------------------+-----------------------------------------
Comment(by simonpj):
The main ticket is, I believe, suggesting that when rebindable syntax is
enabled, then whenever GHC sees
{{{
if e1 then e2 else e3
}}}
it behaves precisely as if you'd written
{{{
cond e1 e2 e3
}}}
from ''both'' the point of view of typechecking, ''and'' the point of view
of desugaring. So, for example if
{{{
cond :: Bool -> Int -> Char
}}}
then you could write
{{{
if x>y then 3 else 'c'
}}}
That seems entirely feasible to me. The question of overloading then
becomes quite orthogonal. For example, if the imported `cond` had this
type:
{{{
cond :: IfThenElse a => Bool -> a -> a -> a
}}}
then that'd be fine. The term `if e1 then e2 else e3` would typecheck and
desugar as if you'd written `cond e1 e2 e3`. I think that would satisfy
vivian without any need for special support.
My main question is this: what about `case`? The proposal would mean that
`if-then-else` was different to
{{{
case e1 of
True -> e2
False -> e3
}}}
Maybe that's ok. Maybe it's even desirable. But I don't see how to
generalise the story to case expressions, at least not without a lot more
elaboration.
Simon
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/836#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs