On Oct 21, 2007, at 6:41 , Peter Hercek wrote:
Brandon S. Allbery KF8NH wrote:
On Oct 19, 2007, at 12:11 , Sebastian Sylvan wrote:
On 19/10/2007, Kalman Noel <[EMAIL PROTECTED]> wrote:
data ExistsNumber = forall a. Num a => Number a
I'm without a Haskell compiler, but shouldn't that be "exists a."?
The problem is that "exists" is not valid in either Haskell 98 or
any current extension, whereas "forall" is a very common
extension. But you can simulate "exists" via "forall", which is
the thrust of these approaches.
When 'exists' is not a keyword, why 'forall' is needed at all?
NB. Haskell98 doesn't have forall. All type variables are
implicitly scoped to the entire type (e.g. foo :: (a -> b) -> a -> b
is actually foo :: forall a b. (a -> b) -> a -> b).
The point of the forall keyword is that it can be scoped. Compare
runState to runST: ST carries around a bracketed forall on the state
expression (forall s. ST s a), preventing it from being viewed or
modified (or initialized!) outside the scope established by runST,
whereas you can carry around a State (State s a) and thread the state
s through an expression "by hand" via evalState / execState (or
pattern matching on the State value, which is what those translate to
after a pass through runState).
Given scoped forall, you can simulate exists by using something very
like (identical to, via Curry-Howard?) de Morgan's Rule.
--
brandon s. allbery [solaris,freebsd,perl,pugs,haskell] [EMAIL PROTECTED]
system administrator [openafs,heimdal,too many hats] [EMAIL PROTECTED]
electrical and computer engineering, carnegie mellon university KF8NH
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe