Type signatures as good style
From HaskellWiki
(Difference between revisions)
(mention rank n types) 
(type inference not always decidable) 

Line 19:  Line 19:  
Where <hask>ShowS</hask> is <hask>String > String</hask> rather than <hask>a > a</hask>. 
Where <hask>ShowS</hask> is <hask>String > String</hask> rather than <hask>a > a</hask>. 

−  ''I remember that for some type extensions the automatic inference fails. Examples?'' 
+  Even more, for some type extensions the automatic inference fails, 
−  +  e.g. the higherorder types used by <hask>Control.Monad.ST.runST</hask> 

−  Higherorder types, e.g., the type of <hask>Control.Monad.ST.runST</hask>: 

<haskell> 
<haskell> 

runST :: (forall s . ST s a) > a 
runST :: (forall s . ST s a) > a 
Revision as of 10:40, 25 December 2008
1 Question
Since Haskell type checkers can automatically derive types of expressions why shall I put explicit type signatures in my programs?
2 Answer
Using explicit type signatures is good style and GHC with option Wall
warns about missing signatures.
Signatures are a good documentation and not all Haskell program readers have a type inference algorithm builtin.
There are also some cases where the infered signature is too general for your purposes.
asTypeOf
a > b > a
asTypeOf
a > a > a
Another example:
emptyString :: ShowS emptyString = id
ShowS
String > String
a > a
Even more, for some type extensions the automatic inference fails,
e.g. the higherorder types used byControl.Monad.ST.runST
runST :: (forall s . ST s a) > a
cannot be inferred in general, because the problem is undecidable. In GHC, they are enabled with the language pragma RankNTypes
.
3 How to add a bunch of signatures?
Ok, this convinced me. How can I add all the signatures I did not write so far?