为什么在这种情况下不映射(映射f)x工作?

sch*_*ine 0 haskell

我最近在Haskell中尝试过这个:

> :t getEqs
getEqs :: [Char] -> [Char] -> ([Bool], [Bool])
> :t mixpairs
mixpairs :: [[[Char]]]
> :t map
map :: (a -> b) -> [a] -> [b]
> map (map getEqs) mixpairs
Run Code Online (Sandbox Code Playgroud)

然而,由于看似没有理由,它返回了这个:

<interactive>:38:1: error:
    • No instance for (Show ([Char] -> ([Bool], [Bool])))
        arising from a use of ‘print’
        (maybe you haven't applied a function to enough arguments?)
    • In a stmt of an interactive GHCi command: print it
> 
Run Code Online (Sandbox Code Playgroud)

AFAICS应该发生的是一个获取列表列表并返回另一个东西的函数映射到另一个列表列表列表.
这似乎应该有效.

lef*_*out 10

看起来这应该有效,而且确实有效.

但是,如果你这样做在提示符下,GHCI要打印出结果,而这并没有工作,因为结果是功能列表,并不能打印功能.

  • 为什么`map getEqs`有类型`[[Char]] - >([Bool],[Bool])`?你忘记了`getEqs`的第二个`[Char]`参数.(另外 - 即使它只有一个参数,`map getEqs`会有类型`[[Char]] - > [([Bool],[Bool])]`). (5认同)