簡體   English   中英

Haskell:使用Lambda抽象時出現GHCI錯誤

[英]Haskell: GHCI error when using lambda abstraction

我試圖運行以下代碼,該代碼摘自Graham Hutton的“在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)]

這項工作奏效了,但是我想運行原始示例,並想知道我錯過了什么。

我沒有這本書,但這顯然是錯字。 應該:

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

順便說一下,作者的網站上有書中的所有代碼,如果您查看Parsing.lhs ,則會看到定義

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

這可能是本章中逐步獲得的更高級的版本,但無論如何,解析器具有輸入字符串的事實至關重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM