### Let ghc help you write your code--must {read, watch} from Matthew Brecknell

Suppose you had no idea what function composition should do, but you were given the type:

and had to define it:

We want a

is thus the only way to honor the declaration.

Yes, this is a simple example... but not only can the method be applied more generally, you can get ghc to help you with error messages of the form "I expected

**(.) :: (b -> c) -> (a -> b) -> a -> c**and had to define it:

**(f . g) x = ???**We want a

**c**. The only way we know to get a**c**is with**f**, which will give us a**c**if we give it a**b**. The only way we're given to get a**b**is with**g**, which will give us a**b**if we give it an**a**. Hey,**x**is an**a**!**(f . g) x = f (g x)**is thus the only way to honor the declaration.

Yes, this is a simple example... but not only can the method be applied more generally, you can get ghc to help you with error messages of the form "I expected

**a**here but {you gave me something else, I can't infer that}". For details and a video working through examples, check out Matthew Brecknell's blog post "Hole-Driven Haskell".