gpt4 book ai didi

idris - 带有 Idris 接口(interface)的奇怪错误消息

转载 作者:行者123 更新时间:2023-12-04 14:56:19 25 4
gpt4 key购买 nike

我正在尝试使用 Idris 接口(interface)实现一个简单的代数结构层次结构。代码如下:

module AlgebraicStructures

-- definition of some algebraic structures in terms of type classes

%access public export

Associative : {a : Type} -> (a -> a -> a) -> Type
Associative {a} op = (x : a) ->
(y : a) ->
(z : a) ->
(op x (op y z)) = (op (op x y) z)

Identity : {a : Type} -> (a -> a -> a) -> a -> Type
Identity op v = ((x : a) -> (op x v) = x,
(x : a) -> (op v x) = x)


Commutative : {a : Type} -> (a -> a -> a) -> Type
Commutative {a} op = (x : a) ->
(y : a) ->
(op x y) = (op y x)


infixl 4 <**>

interface IsMonoid a where
empty : a
(<**>) : a -> a -> a
assoc : Associative (<**>)
ident : Identity (<**>) empty


interface IsMonoid a => IsCommutativeMonoid a where
comm : Commutative (<**>)

但是, idris 给出了这个奇怪的错误信息:
When checking type of constructor of AlgebraicStructures.IsCommutativeMonoid:
Can't find implementation for IsMonoid a

我相信 Idris 接口(interface)的工作方式类似于 Haskell 的类型类。在 Haskell 中,它应该可以工作。我在做傻事吗?

最佳答案

我相信它可能在提示,因为我不知道有什么限制 a在表达式 Commutative (<**>) - 所以它不知道你可以调用 <**>在那种类型上。
显式指定 a似乎对我有用 - Commutative {a} (<**>) - 我希望这意味着 a来自接口(interface)签名的内容在范围内,可用于显式传递给其他类型。

关于idris - 带有 Idris 接口(interface)的奇怪错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37769515/

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