sequence ms = foldr k (return []) ms
where
k m m' = do { x <- m; xs <- m'; return (x:xs) }
k здесь явный liftM2 (:) Вот объявление liftM2:
liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
Т.е. определения одинаковы. Может быть при оптимизации вылезут какие нибудь тонкости, но я сильно сомневаюсь, мне кажется, что время исполнения в обоих случаях будет очень близким.
no subject
Date: 2006-05-25 08:50 am (UTC)(я серъезно не знаю;)
no subject
Date: 2006-05-25 09:09 am (UTC)Вот допустим
data Foo = Foo Int Int Int
ты можешь написать для паттерн-матчинга Foo _ _ _, а можешь {}
no subject
Date: 2006-05-25 09:37 am (UTC)Спасибо. ;)
no subject
Date: 2006-05-25 09:45 am (UTC)no subject
Date: 2006-05-25 09:58 am (UTC)Например, при создании instance Enum для терминалов языка.
no subject
Date: 2006-12-06 09:45 am (UTC)data T = C1 A B C, тоС1 _ _ _этоC1 {}C2 a _ _этоC1 a {}так?
если оно так, то как
С1 a _ cчерез{}?no subject
Date: 2006-12-06 10:21 am (UTC)no subject
Date: 2006-12-06 11:05 am (UTC)no subject
Date: 2006-06-06 12:44 pm (UTC)foldrилиsequence?no subject
Date: 2006-06-06 01:07 pm (UTC)no subject
Date: 2006-06-07 05:05 am (UTC)no subject
Date: 2006-06-07 07:16 am (UTC)sequence ms = foldr k (return []) ms where k m m' = do { x <- m; xs <- m'; return (x:xs) }k здесь явный liftM2 (:)
Вот объявление liftM2:
liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
Т.е. определения одинаковы. Может быть при оптимизации вылезут какие нибудь тонкости, но я сильно сомневаюсь, мне кажется, что время исполнения в обоих случаях будет очень близким.
no subject
Date: 2006-06-07 07:28 am (UTC)