比方说,我有以下类型:
type LinkID = Int
data Link = Link {
lid :: LinkID,
llength :: Int
}
data Snap = Snap {
slid :: LinkID,
slength :: Int
}
现在,我想编写一个基于管道的函数来执行此操作:
getSnaps :: LinkID -> [Link] -> [Snap] -> [(LinkID, [Snap])]
getSnaps l lks snp = map (\x -> (lid x, filter (\y -> lid x == slid y) snp)) a
where a = filter (\x -> lid x > l) lks
假设我已经有 和 的 Producers Link
,Snap
如何getSnaps
从这两个 Producer 中实现 Pipes 世界中的上述功能:
psnap :: Producer Snap IO ()
psnap = undefined
plink :: Producer Link IO ()
plink = undefined
psnap
和的实际类型plink
更多(使用 attoparsec-pipes 创建),但我想知道如何实现 getSnaps frompsnap
和的功能plink
。有没有解决此类问题的正确方法?