目前我正在尝试创建一个采用类型的函数 (a - > a - > a)作为Idris中的参数,而右边的函数是idris的列表的++命令,遗憾的是我收到此错误
ListMonoid :( A:类型) - > RawMonoid ListMonoid A =(A **([],(++)))
当检查具有预期类型的ListMonoid的右侧时 RawMonoid
不能消除名称的歧义:Prelude.List。++,Prelude.Strings。++
Raw Monoid是下面的数据类型
RawMonoid:输入 RawMonoid =(M **(M,M - > M - > M)) infixl 6&
在我看来,它不知道使用哪种++,有没有办法在通话中指定这个?
答案 0 :(得分:1)
您可以将引用限定为(++),例如
ListMonoid A = (A ** ([], List.(++)) )
还有with
关键字,它将模块名称作为其第一个参数 - 它基本上意味着,"在下面的表达式中,首先查看此模块以解析名称&# 34;,例如
ListMonoid A = (A ** ([], with List (++)) )
但是,这些都会在代码中出现以下类型错误:
Type mismatch between
List a -> List a -> List a (Type of (++))
and
A -> A -> A (Expected type)
如果我写:
ListMonoid A = (List A ** ([], (++)) )
它可以根据周围的类型约束选择正确的(++)
。