What are practical uses of applicative style?

后端 未结 11 686
误落风尘
误落风尘 2021-01-30 01:32

I am a Scala programmer, learning Haskell now. It\'s easy to find practical use cases and real world examples for OO concepts, such as decorators, strategy pattern etc. Books an

11条回答
  •  不思量自难忘°
    2021-01-30 02:11

    Applicatives are great when you've got a plain old function of several variables, and you have the arguments but they're wrapped up in some kind of context. For instance, you have the plain old concatenate function (++) but you want to apply it to 2 strings which were acquired through I/O. Then the fact that IO is an applicative functor comes to the rescue:

    Prelude Control.Applicative> (++) <$> getLine <*> getLine
    hi
    there
    "hithere"
    

    Even though you explicitly asked for non-Maybe examples, it seems like a great use case to me, so I'll give an example. You have a regular function of several variables, but you don't know if you have all the values you need (some of them may have failed to compute, yielding Nothing). So essentially because you have "partial values", you want to turn your function into a partial function, which is undefined if any of its inputs is undefined. Then

    Prelude Control.Applicative> (+) <$> Just 3 <*> Just 5
    Just 8
    

    but

    Prelude Control.Applicative> (+) <$> Just 3 <*> Nothing
    Nothing
    

    which is exactly what you want.

    The basic idea is that you're "lifting" a regular function into a context where it can be applied to as many arguments as you like. The extra power of Applicative over just a basic Functor is that it can lift functions of arbitrary arity, whereas fmap can only lift a unary function.

提交回复
热议问题