如何在 Idris 中声明具有中缀样式的函数
How to declare functions with infix style in Idris
非中缀示例有效:
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
您只在使用网站上使用反引号,而不在声明网站上使用:
myelem: (Eq a) => a -> List a -> Bool
myelem x [] = False
myelem x (y::ys) = x == y || (x `myelem` ys)
无法(据我所知)在您即将定义的函数的声明站点上使用中缀语法。
编辑:
然而,有一种方法可以用括号表示法中的中缀函数来做你想做的事情。该示例取自 Prelude
:
infixr 4 <$>
(<$>) : Functor f => (func : a -> b) -> f a -> f b
func <$> x = map func x
非中缀示例有效:
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
您只在使用网站上使用反引号,而不在声明网站上使用:
myelem: (Eq a) => a -> List a -> Bool
myelem x [] = False
myelem x (y::ys) = x == y || (x `myelem` ys)
无法(据我所知)在您即将定义的函数的声明站点上使用中缀语法。
编辑:
然而,有一种方法可以用括号表示法中的中缀函数来做你想做的事情。该示例取自 Prelude
:
infixr 4 <$>
(<$>) : Functor f => (func : a -> b) -> f a -> f b
func <$> x = map func x