相关疑难解决方法(0)

解析器组合器的类型

如果我有一个解析器a : Parser A和一个解析器,b : Parser B那么我可以将它组合成一个解析器a | b : Parser (Either A B).当你开始添加更多替代品并获得类似的类型时,这会有点麻烦Either A (Either B C).我可以想象将之前的类型扁平化为类似的东西Alternative A B C.是否有我可以执行的标准转换,或者我坚持为类型生成一大堆样板文件Alternative A B C ....

parsing haskell types

5
推荐指数
1
解决办法
164
查看次数

如何定义多重合成功能?

有没有办法定义一个Haskell函数,它接受一个(某种类型的集合)函数并产生一个函数:它们的组成从右到左?

我试过了:

foldr ($)

但这只接受一个函数列表,其结果与其参数的类型相同:

foldr ($) :: a -> [a -> a] -> a

所以,我可以这样做:

foldr ($) 5 [(+) 1, (*) 2] 这会产生正确的结果11

然而,试图评估这个:

foldr ($) "hello" [(+) 1, length]

产生以下错误:

错误 - 列表中键入错误

*** Expression : [(1 +),length] *** Term : length *** Type : [a] -> Int *** Does not match : Int -> Int

haskell functional-programming

5
推荐指数
1
解决办法
352
查看次数

标签 统计

haskell ×2

functional-programming ×1

parsing ×1

types ×1