如何将CoFree混合成F-代数的变形?

时间:2016-10-22 14:14:28

标签: haskell catamorphism recursion-schemes

首先,这建立在https://www.schoolofhaskell.com/user/bartosz/understanding-algebras之上 所以如果不熟悉代数和递归方案,请阅读上下文。

假设我有一个简单的表达式解析器:

data Expr a = ... -- whatever
parse :: String -> Fix Expr
eval :: Algebra Expr (Either String Int)

它可能成功也可能不成功。例如:

cata eval $ parse "3+4" -- Right 7
cata eval $ parse "3+x" -- Left "x not defined"

我的问题是,如果有人

1)更新parse函数以使用解析位置注释节点

2)带解析位置的前缀错误消息

我怎样才能将这些新功能与上面的功能集成在一起?

type ParsePositions = (Int,Int)
parse' :: String -> Cofree Expr ParsePositions
prefixError :: ParsePositions -> String -> String

使用示例:

run "3+4" -- Right 7
run "3+x" -- Left "Error parsing [2,2]: x not defined"

这会是一个对称吗?也许是组织形态?两者都需要某种类型的扭曲。

奖励积分:如果评估可以返回Left String,我是否应该使用elgot代数短路?

0 个答案:

没有答案