Scoped type variables
From HaskellWiki
(Difference between revisions)
(use LANGUAGE rather than OPTIONS_GHC pragma) |
(Categories: Glossary, Language extensions) |
||
| Line 30: | Line 30: | ||
This feature should be better documented in the Wiki, but this is a start. | This feature should be better documented in the Wiki, but this is a start. | ||
| + | |||
| + | [[Category:Glossary]] | ||
| + | [[Category:Language extensions]] | ||
Revision as of 20:03, 22 December 2009
Scoped Type Variables are an extension to Haskell's type system that allow free type variables to be re-used in the scope of a function. They are also described in the GHC documentation.
As an example, consider the following functions:
{-# LANGUAGE ScopedTypeVariables #-} ... mkpair1 :: forall a b. a -> b -> (a,b) mkpair1 aa bb = (ida aa, bb) where ida :: a -> a -- This refers to a in the function's type signature ida = id mkpair2 :: forall a b. a -> b -> (a,b) mkpair2 aa bb = (ida aa, bb) where ida :: b -> b -- Illegal, because refers to b in type signature ida = id mkpair3 :: a -> b -> (a,b) mkpair3 aa bb = (ida aa, bb) where ida :: b -> b -- Legal, because b is now a free variable ida = id
Scoped type variables make it possible to specify the particular type of a function in situations where it is not otherwise possible, which can in turn help avoid problems with the Monomorphism_restriction.
This feature should be better documented in the Wiki, but this is a start.
