Нужное что-то вроде productWith листов, вот имплементация
apply :: [(C, C, C)] -> [(S, S, S)] -> [(CS, CS, CS)]
apply [] _ = []
apply _ [] = []
apply (x:xs) ys = apply' x ys ++ apply xs ys
where
apply' x@(x1, x2, x3) ((y1, y2, y3):ys) = (CS x1 y1, CS x2 y2, CS x3 y3) : apply' x ys
apply' _ _ = []
Думаю, здесь нужно что-то вроде Applicative, чтобы сделать это элегантнее?
Здравствуйте, nikov, Вы писали:
N>Здравствуйте, Haskell.Curry, Вы писали:
HC>>Думаю, здесь нужно что-то вроде Applicative, чтобы сделать это элегантнее?
N>liftA2?
Спасибо, так и чувствовал, как раз после прочитки typeclassopedia
apply = liftA2 (\ (c1, c2, c3) (s1, s2, s3) -> (CS c1 s1, CS c2 s2, CS c3 s3) )
Здравствуйте, Haskell.Curry, Вы писали:
HC>Спасибо, так и чувствовал, как раз после прочитки typeclassopedia
Может быть, где-то удобнее окажутся list comprehensions:
[x*y | x <- [1,2,3], y <- [4,5,6]]
В GHC есть ещё всякие полезные
расширения для них.