我有一個m支持以下操作的 monad:
someName :: (t1 -> m u1) -> (t2 -> m u2) -> ((t1, t2) -> m (u1, u2))
在更像英語的地方:給定一個可以用于bind將 anm t1轉換m u1為另一個型別對的映射和另一個映射的映射,為這兩種型別的對回傳這樣的映射。
這個概念有名字嗎?它對所有單子都有明確的定義嗎?只有一些?沒有,我的事實與我正在研究的事實不符?
這讓人想起traverse對 s 的操作Traversable,只是涉及兩個映射。另外,traverse對于二元組,似乎只將映射應用于第二個元素:
ghci> f a = Just (a 1)
ghci> traverse f (0, 1)
Just (0,2)
ghci> traverse f ("Hello", 1)
Just ("Hello",2)
uj5u.com熱心網友回復:
它被呼叫bitraverse并成為您最喜歡的編譯器的標準配置。
uj5u.com熱心網友回復:
所有的單子都有這個操作。事實上,所有的應用函子都有這樣的操作:
someName :: Applicative m => (t1 -> m u1) -> (t2 -> m u2) -> ((t1, t2) -> m (u1, u2))
someName f1 f2 = \(t1, t2) -> (,) <$> f1 t1 <*> f2 t2
出于這個原因,我懷疑它有任何特殊的名稱,或者除了Applicative更普遍的那些之外的任何有趣的屬性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/536669.html
標籤:哈斯克尔单子遍历
上一篇:Haskell用向量翻譯一個點
