Without `forall`, the ghci will complain: "Not in scope: type variable `b' " It is clear now. thank you!
Dan Piponi-2 wrote: > > On Wed, Nov 11, 2009 at 4:24 PM, zaxis <z_a...@163.com> wrote: >> data Branch tok st a = forall b. Branch (PermParser tok st (b -> a)) >> (GenParser tok st b) >> >> I have hoogled the `forall` but i cannot find any appropriate answer! > > That's an example of an existential type. What that line is saying is > that for any type b (ie. for all b) that you could pick, the > constructor called 'Branch' can take something of type 'PermParser tok > st (b -> a)' and something of type 'GenParser tok st b' and make > something of type 'Branch tok st a' out of it. > > The reason it's called an existential type is something like this: > once you've constructed your thing of type 'Branch tok st a' you've > lost the information about what the type b was. So all you know is > that inside your thing is a pair of objects of type 'PermParser tok st > (b -> a)' and 'GenParser tok st b' but you don't know what b is. All > you know is that there exists some type 'b' that it was made of. > > To use these types with ghc you need to use the compilation flag > -XExistentialQuantification. > > There's more to be found here: > http://www.haskell.org/haskellwiki/Existential_type > -- > Dan > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > > ----- fac n = foldr (*) 1 [1..n] -- View this message in context: http://old.nabble.com/What-does-the-%60forall%60-mean---tp26311291p26314602.html Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe