gpt4 book ai didi

类型别名声明中的 Haskell 类型类

转载 作者:行者123 更新时间:2023-12-04 13:34:26 25 4
gpt4 key购买 nike

我正在尝试开发一个模块,该模块通过接收将它们作为参数管理的函数来对一组状态执行不同的算法。我正在定义不同的类型别名以使其更容易实现;理解这一点的一个简单示例是:

-- Function that expands a state
type Expand = State -> State
-- Function that evaluates a state
type Eval = State -> Float
-- Group of states
type Tree = [State]

然后我意识到我希望 State 成为可相等类型的别名:我真的不关心用户的状态是否是 (Int, Int), Float, or String 只要他有可能实现 ExpandEval 函数和让我比较两个不同的状态。

我如何概括 State 类型来实现这一点?我想到的直觉是类似 type State = (Eq a) => a 但如果没有范围内的 a 显然是不可能的。有没有一种简单的方法可以声明将 State 视为黑盒的函数?

最佳答案

您需要将通用状态作为类型参数包含在内。

type Expand s = s -> s
type Eval s = s -> Float
type Tree s = [s]

完全隐藏它是不可能的,因为例如(Int, Int) 状态的 Expand 是与 String 状态完全不同的类型。

至于Eq 约束。通常,您只会在需要约束的特定函数中本地包含它。

关于类型别名声明中的 Haskell 类型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41853468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com