Functional programming Can';t消除歧义名称:Prelude.List.&x2B+;,前奏曲.弦乐++;Idris中的错误

Functional programming Can';t消除歧义名称:Prelude.List.&x2B+;,前奏曲.弦乐++;Idris中的错误,functional-programming,typeerror,idris,Functional Programming,Typeerror,Idris,目前,我正在尝试创建一个函数,其类型为 (a->a->a)作为Idris中的一个参数,正确的函数是对Idris中的列表执行++命令。不幸的是,我遇到了这个错误 ListMonoid:(A:Type)->RawMonoid ListMonoidA=(A**([]),(++) 检查具有预期类型的ListMonoid的右侧时 原始幺半群 无法消除名称的歧义:Prelude.List.++,Prelude.String++ 原始幺半群是下面的一种数据类型 原始幺半群:类型 原始幺半群=(M**(M,M-

目前,我正在尝试创建一个函数,其类型为 (a->a->a)作为Idris中的一个参数,正确的函数是对Idris中的列表执行++命令。不幸的是,我遇到了这个错误

ListMonoid:(A:Type)->RawMonoid ListMonoidA=(A**([]),(++)

检查具有预期类型的ListMonoid的右侧时 原始幺半群

无法消除名称的歧义:Prelude.List.++,Prelude.String++

原始幺半群是下面的一种数据类型

原始幺半群:类型 原始幺半群=(M**(M,M->M->M)) 中间轴6&


在我看来,它似乎不知道使用哪个+,有没有办法在调用中指定它?

您可以限定对(++)的引用,例如

还有带关键字的
,它将模块名称作为第一个参数-它基本上意味着,“在下面的表达式中,首先查看此模块以解析名称”,例如

但是,这两种代码都会导致以下类型的错误:

    Type mismatch between
            List a -> List a -> List a (Type of (++))
    and
            A -> A -> A (Expected type)
如果我写:

ListMonoid A = (List A ** ([], (++)) )
它能够根据周围的类型约束选择正确的
(++)

    Type mismatch between
            List a -> List a -> List a (Type of (++))
    and
            A -> A -> A (Expected type)
ListMonoid A = (List A ** ([], (++)) )