Adding a function type

So we can do more checks at compile time
added some operator

hook (f g)(x) == f(x, g(x)) (NOTE: parethesis mandatory)
and compose (f . g)(x) == f(g(x)) (NOTE: space between function and .
mandatory)