I'm trying to understand Haskell function types right now. Let's say I want to compose two functions f1 and f2 (suppose I don't know their definition). The function signature of f2 . f1 is:
f1 . f2 :: (Fractional (a -> a), Num a) => a -> (a -> a) -> a -> a
How do I read this signature and more specifically, how do I know how to apply arguments to this composition?
e.g. how can I read the type information of f1 . f2 to be able to write valid expressions like
(f1 . f2 2) 3 4
(f1 2. f2 2) 4