
What is the reason case and let expressions are treated differently in this case
Please check the section "7.4.5.4. Restrictions section" in https://downloads.haskell.org/~ghc/7.6.3/docs/html/users_guide/data-type-ext... It says,
In general, you can only pattern-match on an existentially-quantified constructor in a case expression or in the patterns of a function definition. The reason for this restriction is really an implementation one. Type-checking binding groups is already a nightmare without existentials complicating the picture. Also an existential pattern binding at the top level of a module doesn't make sense, because it's not clear how to prevent the existentially-quantified type "escaping". So for now, there's a simple-to-state restriction. We'll see how annoying it is.
On 10/07/19 9:26 PM, Lana Black wrote:
A followup question. What is the reason case and let expressions are treated differently in this case? I can see the error message saying about the type variable escaping its scope, but I don't understand how exactly this can happen with let. _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.