[Haskell-cafe] IO is not a monad (and seq, and in general _|_)
Seth Gordon
sethg at ropine.com
Tue Jan 23 14:58:34 EST 2007
Brandon S. Allbery KF8NH wrote:
> Can someone explain to me, given that (a) I'm not particularly expert
> at maths, (b) I'm not particularly expert at Haskell, and (c) I'm a bit
> fuzzybrained of late:
Me too...
> Given that _|_ represents in some sense any computation not
> representable in and/or not consistent with Haskell, why/how is
> reasoning about Haskell program behavior in the presence of _|_ *not*
> like reasoning about logic behavior in the presence of (p^~p)->q?
The only catch I see to that POV is that the way `seq` is defined,
"undefined `seq` 42" *must* return an error. If this were analogous to
"(p^~p)->q", then "undefined `seq` 42" would be allowed to return any
value whatsoever.
(Imagine an "unsafeSeq" operator, such that "undefined `unsafeSeq` 42"
could *either* raise an exception or return 42, and implementations
would be free to replace "a `unsafeSeq` b" with "b" when optimizing.
Would this be useful?)
Can we treat "a `seq` b" as a sort of pragma and not a "real" function?
Does Haskell semantics become tractable again if we treat Haskell
excluding "seq" (and excluding exceptions? and excluding threads?) as a
category, and the exceptions as operating on some kind of meta-level?
More information about the Haskell-Cafe
mailing list