Например,
-- Num a => ([Char], a -> a) <*> ([Char], a)
> ("hello ",(*6)) <*> ("world",7)
("hello world",42)
-- Num a => [a -> a] <*> [a]
> [(*7),(*6)] <*> [6,7]
[42,49,36,42]
-- Num a => [[Char], a -> a] <*> [[Char], a]
> ["hello ",(*6)] <*> ["world",7]
<interactive>:17:2:
Couldn't match expected type ‘[Char] -> [Char]’
with actual type ‘[Char]’
In the expression: "hello "
In the first argument of ‘(<*>)’, namely ‘["hello ", (* 6)]’
In the expression: ["hello ", (* 6)] <*> ["world", 7]
В трех примерах <*>
показывает разное поведение. Что случается? Почему в третьем случае он ожидает [Char] -> [Char]
, а не [Char]
, как в первом случае. Более того, даже если в кортежах всего [Char]
, <*>
объединяет их вместе.
[[Char], a -> a]
или, в более общем смысле,[a,b]
не является списком в haskell. - person Franky   schedule 22.11.2015