【问题标题】:Haskell: GHCI error when using lambda abstractionHaskell:使用 lambda 抽象时出现 GHCI 错误
【发布时间】:2014-02-16 21:45:10
【问题描述】:

我尝试运行以下代码,取自 Graham Hutton 的“Programming in Haskell”

type Parser a = [(a, String)]

return :: a -> Parser a
return v = \inp -> [(v,inp)]

在 GHCI 7.6.3 中加载模块时出现以下错误:

Couldn't match expected type `t0 -> [(a, t0)]'
    with actual type `[(a, String)]'
The lambda expression `\ inp -> ...' has one argument,
but its type `Parser a' has none
In the expression: \ inp -> [(v, inp)]
In an equation for `return': return v = \ inp -> [(v, inp)]
Failed, modules loaded: none.

我将示例更改为:

type Parser a = [(a, String)]

return :: a -> String -> Parser a
return v inp = [(v,inp)]

这行得通,但我想运行原始示例,但想知道我错过了什么。

【问题讨论】:

    标签: haskell lambda ghci


    【解决方案1】:

    我没有这本书,但它显然是一个错字。应该是:

    type Parser a = String -> [(a, String)]
    

    顺便说一句,作者的网站上有本书的所有代码,如果你看一下Parsing.lhs,你就会看到定义

    newtype Parser a  =  P (String -> [(a,String)])
    

    这可能是在本章中逐步获得的更高级版本,但无论如何,解析器具有输入字符串这一事实至关重要。

    【讨论】:

      猜你喜欢
      • 2016-10-12
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      相关资源
      最近更新 更多