考慮使用元組的代碼:
import Data.Tuple.All -- tuple library
import Control.Lens
..............
f2 :: (SequenceT a1 b, Each s a1 a2 b2) => s -> (a2 -> b2) -> b
f2 tpl f = sequenceT $ tpl & each %~ f
用法示例:
> f x = print x >> pure x
> f2 (1,2,3,4) f
1
2
3
4
(1, 2, 3, 4)
這意味著當我在串列上有一個map和sequence時,現在我f2在元組上。但f2取決于元組。
我怎樣才能f2只用鏡頭寫同樣的東西?沒有sequenceT. 可能嗎?
PS。也許您知道另一個類似的簡單解決方案?
uj5u.com熱心網友回復:
您確實不需要包元組,只需要lens,因為f2實際上是 just flip each。
import Control.Lens
f2 :: (Each s t a b, Applicative f) => s -> (a -> f b) -> f t
f2 = flip each
main = do
xs <- f2 (1,2,3) (\x -> print x >> pure (x :: Int))
print xs
{- Output:
1
2
3
(1,2,3)
-}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517124.html
標籤:哈斯克尔元组哈斯克尔镜头
