Difference between revisions of "Untypeable Haskell 98"
Jump to navigation
Jump to search
DonStewart (talk | contribs) (categorise) |
Tomjaguarpaw (talk | contribs) (Deleting page that hasn't been updated for over 10 years) |
||
Line 1: | Line 1: | ||
− | Here we document code that looks like it should be valid Haskell98, but |
||
− | isn't typeable without extensions: |
||
− | |||
− | <haskell> |
||
− | f :: a -> a |
||
− | f x = g x |
||
− | where |
||
− | -- g :: a -> a |
||
− | g y = bind x y |
||
− | |||
− | bind :: a -> a -> a |
||
− | bind a b = a |
||
− | </haskell> |
||
− | |||
− | The above Haskell code is Haskell 98, rank-1 types, but cannot be given a type signature. Try commenting out the type signature for g and everything will go wrong. |
||
− | |||
− | In GHC making the type of f :: forall a . a -> a, and adding -fglasgow-exts will make this code work. No such luck in Hugs. |
||
− | |||
− | With pattern type annotations, however, the code works in both Hugs and GHC: |
||
− | |||
− | <haskell> |
||
− | f :: a -> a |
||
− | f (x :: a) = g x |
||
− | where |
||
− | g :: a -> a |
||
− | g y = bind x y |
||
− | |||
− | bind :: a -> a -> a |
||
− | bind a b = a |
||
− | </haskell> |
||
− | |||
− | [[Category:Proposals]] |