我如何使用&&&与 - >也许a

ais*_*ais 4 haskell arrows maybe

我有两个功能

f1:: String -> Int
f2:: String -> Int

f3:: String -> (Int,Int)    
f3 = f1 &&& f2
Run Code Online (Sandbox Code Playgroud)

然后他们被改为String - > Maybe Int

f1:: String -> Maybe Int
f2:: String -> Maybe Int

f3:: String -> (Maybe Int,Maybe Int)    
Run Code Online (Sandbox Code Playgroud)

是否有免费的方式获得功能

f4:: String -> Maybe (Int, Int)
Run Code Online (Sandbox Code Playgroud)

因此,如果f1和f2都返回Just,f4也将返回Just否则没有

use*_*465 8

import Control.Arrow
import Control.Applicative

h :: (Applicative f) => (a -> f b) -> (a -> f c) -> a -> f (b, c)
h = liftA2 (liftA2 (,))
Run Code Online (Sandbox Code Playgroud)

等于 h f g x = liftA2 (,) (f x) (g x)