X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=docs%2Fusers_guide%2Fglasgow_exts.xml;h=c370ce3388308a602a0f020a8745652fed0b5d3e;hb=f535676469e049dfb44cb198c32de7de797eafa9;hp=09fd3f509fd4efbab42e79ee8ffaa3e7e508f797;hpb=bebf54b1fefef0c337955ec1e653b44f4ec63d10;p=ghc-hetmet.git diff --git a/docs/users_guide/glasgow_exts.xml b/docs/users_guide/glasgow_exts.xml index 09fd3f5..c370ce3 100644 --- a/docs/users_guide/glasgow_exts.xml +++ b/docs/users_guide/glasgow_exts.xml @@ -106,9 +106,7 @@ documentation describes all the libraries that come with GHC. This option enables the language extension defined in the - Haskell 98 Foreign Function Interface Addendum plus deprecated - syntax of previous versions of the FFI for backwards - compatibility. + Haskell 98 Foreign Function Interface Addendum. New reserved words: foreign. @@ -116,7 +114,7 @@ documentation describes all the libraries that come with GHC. - ,: + ,: These two flags control how generalisation is done. @@ -3301,6 +3299,7 @@ changing the program. A lexically scoped type variable can be bound by: A declaration type signature () +An expression type signature () A pattern type signature () Class and instance declarations () @@ -3352,6 +3351,23 @@ quantification rules. + +Expression type signatures + +An expression type signature that has explicit +quantification (using forall) brings into scope the +explicitly-quantified +type variables, in the annotated expression. For example: + + f = runST ( (op >>= \(x :: STRef s Int) -> g x) :: forall s. ST s Bool ) + +Here, the type signature forall a. ST s Bool brings the +type variable s into scope, in the annotated expression +(op >>= \(x :: STRef s Int) -> g x). + + + + Pattern type signatures @@ -3709,6 +3725,33 @@ the standard method is used or the one described here.) + +Stand-alone deriving declarations + + +GHC now allows stand-alone deriving declarations: + + + + data Foo = Bar Int | Baz String + + deriving Eq for Foo + + +Deriving instances of multi-parameter type classes for newtypes is +also allowed: + + + newtype Foo a = MkFoo (State Int a) + + deriving (MonadState Int) for Foo + + + + + + + Generalised typing of mutually recursive bindings