如何在Idris中使用Infix样式声明函数

时间:2018-06-22 02:31:08

标签: idris

非infix示例有效:

myelem: (Eq a) => a -> List a -> Bool
myelem x []     = False
myelem x (y::ys) = x == y || (myelem x ys)

我在以下尝试了另一个置换,在此我删除了 类型声明行中的反引号,但无论哪种方式都会失败:

`myelem`: (Eq a) => a -> List a -> Bool
x `myelem` []     = False
x `myelem` (y::ys) = x == y || (x `myelem` ys)

这是使用Idris 1.3.0

1 个答案:

答案 0 :(得分:3)

您只能在使用站点上使用反引号,而不能在声明站点上使用反引号:

myelem: (Eq a) => a -> List a -> Bool 
myelem x []     = False
myelem x (y::ys) = x == y || (x `myelem` ys)

(我知道)无法在声明站点上为您即将定义的函数使用中缀语法。

编辑: 但是,可以使用括号符号中的infix函数来完成所需的操作。该示例摘自Prelude

infixr 4 <$>
(<$>) : Functor f => (func : a -> b) -> f a -> f b
func <$> x = map func x