Haskell 我如何使用&&&;使用a->;也许是
我有两个功能Haskell 我如何使用&&&;使用a->;也许是,haskell,arrows,maybe,Haskell,Arrows,Maybe,我有两个功能 f1:: String -> Int f2:: String -> Int f3:: String -> (Int,Int) f3 = f1 &&& f2 然后它们被更改为字符串->可能是Int f1:: String -> Maybe Int f2:: String -> Maybe Int f3:: String -> (Maybe Int,Maybe Int) 有没有获得函数的无点方法 f4:
f1:: String -> Int
f2:: String -> Int
f3:: String -> (Int,Int)
f3 = f1 &&& f2
然后它们被更改为字符串->可能是Int
f1:: String -> Maybe Int
f2:: String -> Maybe Int
f3:: String -> (Maybe Int,Maybe Int)
有没有获得函数的无点方法
f4:: String -> Maybe (Int, Int)
因此,如果f1和f2都返回Just,f4也将返回Just,否则什么都不会返回。您可以使用
liftA2
获得无点版本,但我不确定无点版本是否值得:
λ> :t \f1 f2 -> uncurry (liftA2 (,)) . (f1 &&& f2)
\f1 f2 -> uncurry (liftA2 (,)) . (f1 &&& f2)
:: Applicative f => (b1 -> f a) -> (b1 -> f b) -> b1 -> f (a, b)
这等于
hfgx=liftA2(,)(fx)(gx)
酷!不过,我宁愿使用Applicative
的liftA2
。
import Control.Arrow
import Control.Applicative
h :: (Applicative f) => (a -> f b) -> (a -> f c) -> a -> f (b, c)
h = liftA2 (liftA2 (,))