idris - 如何在 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
推荐阅读
- mysql - 自增非唯一列
- node.js - 安装 npm 6.4.1 版时如何修复错误
- java - 如何为 2 种不同类型的基于值的类编写等于?
- python - 熊猫:当列值更改时在另一列中注释
- python - 如何使用 Parallel-SSH 库传输环境变量
- javascript - 角js中具有不同大小和结构的3个值的半圆进度条
- python - 循环嵌套字典并在不满足条件时删除(python)
- r - Logit回归:glmer vs bife
- angular - 无法遍历我的 html 中的数组
- android - Android firebase 写入数据加载另一个片段或使用这些片段重新加载活动