小编Jen*_*n24的帖子

如何编写a-> b - > b - > b类型的函数来折叠树

一些背景:我在Haskell中有以下类型的foldT函数(如foldr但对于树).

foldT :: (a -> b -> b -> b) -> b -> Tree a -> b 
Run Code Online (Sandbox Code Playgroud)

此foldT仅将类型(a - > b - > b - > b)作为输入函数.

我试图找到一种方法将我的树转换为一个列表,并无法找到一种方法使我的追加函数采取形式(a - > b - > b - > b).

以下是无效的,因为它不是正确的类型:

append x y z = append x:y:z 
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

谢谢!

tree haskell append fold

2
推荐指数
1
解决办法
382
查看次数

指定类型只能存在于一个类中,如果它已存在于Haskell中的其他类中

我正在研究涉及统一的问题,使用用户定义的类型Subst a.问题是:

"定义一个类型类Unifiable,它指定一个函数unify :: a - > a - > Maybe(Subst a)必须为这个类中的任何一个类型定义.一个类型a只能在Unifiable类中,如果它已经是在Eq和Substitutable类中,这应该在你的定义中表示."

到目前为止,我已经定义了Substitutable和Unifiable:

class Substitutable a where
subst :: Subst a -> a -> a

class Unifiable a where
unify :: a -> a -> Maybe (Subst a)
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何将类型a指定为Unifiable类,只有它已经在Eq和Substitutable类中.

我不是在寻找这个特定问题的答案,但总的来说,如果指定一个类型只能在一个类中,如果它已经存在于其他类中,我该怎么办?

谢谢.

haskell instance unification typeclass

2
推荐指数
1
解决办法
80
查看次数

标签 统计

haskell ×2

append ×1

fold ×1

instance ×1

tree ×1

typeclass ×1

unification ×1