# Type signatures as good style

### From HaskellWiki

## 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 built-in.
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

*I remember that for some type extensions the automatic inference fails. Examples?*

Control.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?