Scoped type variables
From HaskellWiki
(Difference between revisions)
m (ScopedTypeVariables moved to Scoped type variables) |
m |
||
| Line 27: | Line 27: | ||
</haskell> | </haskell> | ||
| - | 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 [[ | + | 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. | This feature should be better documented in the Wiki, but this is a start. | ||
Revision as of 20:04, 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.
