haskell - Can some explain how the following code works? -


i doing coding challenge in codewar: write function avg calculates average of numbers in given list. solution works don't quite understand 1 of solutions of others. can explain?

avg :: [float] -> float avg = (/) <$> sum <*> fromintegral . length 

shouldn't be:

avg l = pure (/) <*> sum l <*> fromintegral . length  $ l  

this code uses applicative instance of (->) a type, defined here as:

instance applicative ((->) a)     pure = const     (<*>) f g x = f x (g x) 

you can interpret implementation thinking of naryfunction <$> f1 <*> f2 <*> ... <*> fn "apply same parameter n functions , apply resulting arguments naryfunction".

in case, (/) <$> sum <*> fromintegral . length can thought \ xs -> (/) (sum xs) ((fromintegral . length) xs) sum xs / fromintegral (length xs).

you can prove expanding expression definition of (<*>):

avg = (/) <$> sum <*> fromintegral . length avg = fmap (/) sum <*> fromintegral . length avg xs = (fmap (/) sum) xs ((fromintegral . length) xs) avg xs = ((/) . sum xs) (fromintegral (length xs))  -- fmap f g = f . g avg xs = sum xs / fromintegral (length xs) 

Comments

Popular posts from this blog

node.js - Node js - Trying to send POST request, but it is not loading javascript content -

javascript - Replicate keyboard event with html button -

javascript - Web audio api 5.1 surround example not working in firefox -