对于concatMap (\n -> replicateM n ['a'..'z']) [1..], 我是这样理解的:(为了好说明, 我将范围定为'a'..'c')
replicateM 1 ['a'..'c'] = ["a","b","c"]
replicateM 2 ['a'..'c'] = ["aa","ab","ac","ba","bb","bc","ca","cb","cc"]
replicateM 3 ['a'..'c'] = ["aaa","aab","aac","aba","abb","abc","aca","acb","acc","baa","bab","bac","bba","bbb","bbc","bca","bcb","bcc","caa","cab","cac","cba","cbb","cbc","cca","ccb","ccc"]
......
然后再将这些list合并就可以了.
BTW,
:m Control.Applicative
Prelude Control.Applicative> :i <*>
class (Functor f) => Applicative f where
...
(<*>) :: f (a -> b) -> f a -> f b
-- Defined in Control.Applicative
infixl 4 <*>
主要对<*>不太明白 ! |