Difference between revisions of "Untypeable Haskell 98"

From HaskellWiki
Jump to: navigation, search
(categorise)
(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]]
 

Revision as of 14:51, 6 February 2021