NuN*_*uNu 4 haskell substitution
我正在尝试在Haskell中编写替换算法.我已经Subst a使用单个构造函数定义了一个多态数据类型,S::[(String, a)] -> Subst a如下所示:
data Subst a = S [(String, a)]
Run Code Online (Sandbox Code Playgroud)
我现在想编写一个函数single::String -> a -> Subst a来构造仅一个变量的替换
这是我试过的:
single::String -> a -> Subst a
single s1 (Subst a) = s1 a
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误: Not in scope: data constructor 'Subst'
有谁有洞察我做错了什么?
数据构造函数与类型构造函数不同
在你的代码的类型构造是Subst该数据的构造是S
类型构造函数用于创建新的类型,例如在data Foo = Foo (Maybe Int) Maybe一个类型的构造,Foo是数据的构造函数(以及类型构造,但它们可以被不同地命名为你发现的).数据构造函数用于创建类型的实例(也不要将其与创建多态类型的实例混淆,例如Int -> Int是实例a -> a).
因此,您需要S在single函数中使用模式匹配时使用.没有Subst.
希望这是有道理的,如果没有,请告诉我:)
对于所有意图和目的,PS数据构造函数都是函数,这意味着您可以使用它们执行与函数通常相同的操作.例如,你可以这样做map Bar [a,b,c],它将数据构造函数应用于每个元素.