X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=docs%2Fusers_guide%2Fglasgow_exts.xml;h=42c3fb8f9c62a8f7a97bbc553648f5d87a63fd85;hb=02e3571607b7c0bf460cdac1e02fa0ddcd6c4a8b;hp=da61c6a3a5269ac03dbaf3f0cc3b295b69bfe42d;hpb=0a7d81c6f5a289bd8ade44cd2dc71123ee89dc64;p=ghc-hetmet.git
diff --git a/docs/users_guide/glasgow_exts.xml b/docs/users_guide/glasgow_exts.xml
index da61c6a..42c3fb8 100644
--- a/docs/users_guide/glasgow_exts.xml
+++ b/docs/users_guide/glasgow_exts.xml
@@ -52,16 +52,42 @@ documentation describes all the libraries that come with GHC.
Language options recognised by Cabal can also be enabled using the LANGUAGE pragma,
thus {-# LANGUAGE TemplateHaskell #-} (see >).
- The flag :
+ The flag
- simultaneously enables the following extensions:
- ,
- ,
- ,
- ,
- .
+ is equivalent to enabling the following extensions:
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ ,
+ .
Enabling these options is the only
- effect of -fglasgow-exts
+ effect of -fglasgow-exts.
We are trying to move away from this portmanteau flag,
and towards enabling features individually.
@@ -339,6 +365,43 @@ Indeed, the bindings can even be recursive.
+
+ New qualified operator syntax
+
+ A new syntax for referencing qualified operators is
+ planned to be introduced by Haskell', and is enabled in GHC
+ with
+ the
+ option. In the new syntax, the prefix form of a qualified
+ operator is
+ written module.(symbol)
+ (in Haskell 98 this would
+ be (module.symbol)),
+ and the infix form is
+ written `module.(symbol)`
+ (in Haskell 98 this would
+ be `module.symbol`.
+ For example:
+
+ add x y = Prelude.(+) x y
+ subtract y = (`Prelude.(-)` y)
+
+ The new form of qualified operators is intended to regularise
+ the syntax by eliminating odd cases
+ like Prelude... For example,
+ when NewQualifiedOperators is on, it is possible to
+ write the enerated sequence [Monday..]
+ without spaces, whereas in Haskell 98 this would be a
+ reference to the operator ‘.‘
+ from module Monday.
+
+ When is on, the old Haskell
+ 98 syntax for qualified operators is not accepted, so this
+ option may cause existing Haskell 98 code to break.
+
+
+
+
@@ -796,11 +859,6 @@ and improve termination (Section 3.2 of the paper).
-The web page: http://www.cse.ogi.edu/PacSoft/projects/rmb/
-contains up to date information on recursive monadic bindings.
-
-
-
Historical note: The old implementation of the mdo-notation (and most
of the existing documents) used the name
MonadRec for the class and the corresponding library.
@@ -3440,14 +3498,36 @@ Notice that we gave a type signature to f, so GHC had to
check that f has the specified type.
Suppose instead we do not give a type signature, asking GHC to infer
it instead. In this case, GHC will refrain from
-simplifying the constraint C Int [Int] (for the same reason
+simplifying the constraint C Int [b] (for the same reason
as before) but, rather than rejecting the program, it will infer the type
- f :: C Int b => [b] -> [b]
+ f :: C Int [b] => [b] -> [b]
That postpones the question of which instance to pick to the
call site for f
by which time more is known about the type b.
+You can write this type signature yourself if you use the
+
+flag.
+
+
+Exactly the same situation can arise in instance declarations themselves. Suppose we have
+
+ class Foo a where
+ f :: a -> a
+ instance Foo [b] where
+ f x = ...
+
+and, as before, the constraint C Int [b] arises from f's
+right hand side. GHC will reject the instance, complaining as before that it does not know how to resolve
+the constraint C Int [b], because it matches more than one instance
+declaration. The solution is to postpone the choice by adding the constraint to the context
+of the instance declaration, thus:
+
+ instance C Int [b] => Foo [b] where
+ f x = ...
+
+(You need to do this.)
The willingness to be overlapped or incoherent is a property of
@@ -3622,9 +3702,11 @@ to work since it gets translated into an equality comparison.
The context of a type signature
-Unlike Haskell 98, constraints in types do not have to be of
-the form (class type-variable) or
-(class (type-variable type-variable ...)). Thus,
+The flag lifts the Haskell 98 restriction
+that the type-class constraints in a type signature must have the
+form (class type-variable) or
+(class (type-variable type-variable ...)).
+With
these type signatures are perfectly OK
g :: Eq [a] => ...