- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Idris 进行类型驱动开发,学习如何定义具有可变数量参数的函数。我有点野心,想写一个 mapN
将映射 (n : Nat)
的函数的函数参数到 n
一些 Applicative
的值类型。
调查这个问题让我认为,如果不至少向函数提供参数的类型,这可能是不可能的。这促使我尝试编写一个函数,它需要一个 Nat
和一个可变数量 Type
参数并返回一个函数类型,就像在类型之间串起箭头一样。如:
Arrows 0 Int = Int
Arrows 1 Int String = Int -> String
Arrows : (n : Nat) -> (a : Type) -> Type
Arrows Z a = a
Arrows (S k) a = f where
f : Type -> Type
f b = Arrows k a -> b
Type
有时它会返回
Type -> Type
有时它会返回
Type -> Type -> Type
等等。我认为这与编写具有可变数量参数的任何其他函数大致一样简单,但似乎因为这些参数是类型,所以这可能是不可能的。
最佳答案
那么,Arrows
正如您所指出的,有一个依赖类型:
Arrows 0 : Type -> Type
Arrows 1 : Type -> Type -> Type
Arrows 2 : Type -> Type -> Type -> Type
Type
的外观这里什么都没有改变。具体来说,请注意
Type : Type
,
(Type -> Type) : Type
, 等等。可能是
Int
.可能是
n ** Vect n (Fin n)
.换句话说,类型和种类之间没有区别。
arrowsTy : Nat -> Type
arrowsTy Z = Type
arrowsTy (S k) = Type -> arrowTy k
Arrows
的类型。
Arrows
:
Arrows : (n : Nat) -> Type -> arrowTy n
Arrows Z a = a
Arrows (S k) a = compose (\b => a -> b) . Arrows k
where compose : { n : Nat } -> (Type -> Type) -> arrowsTy n -> arrowsTy n
-- compose is used to modify the eventual result of the recursion
compose { n = Z } g f = g f
compose { n = S k } g f = compose g . f
compose
进入
Arrows
,你可以得到另一个版本:
Arrows' : (Type -> Type) -> (n : Nat) -> Type -> arrowTy n
Arrows' finalize Z x = finalize x
Arrows' finalize (S k) x = Arrows' (finalize . (\r => x -> r)) k
Arrows : (n : Nat) -> Type -> arrowTy n
Arrows = Arrows' id
关于idris - 是否可以在 Idris 中对种类进行抽象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48371701/
我正在为我的项目使用 Google Cloud Datastore(而非 NDB)。 python2.7 和 Django。 我想创建一个新模型,比如说 Tag 模型。 class Tag(db.Mo
我正在研究使用 monad 推导式来表示 SQL 查询,并生成适当的 SQL。乍一看,这不是问题,看起来很合适。但我必须限制类型,这些类型只能形成产品的单子(monad),而不是总和,而且我想不出一种
在Foldable文档,我看到以下实例: (Foldable f, Foldable g) => Foldable (Compose * * f g) 如果我查看 Compose 的定义,我看到它被声
给定一个团队->运动员关系并查询所有运动员。什么 我对fetch="Join"有误解吗?该映射是否应引起 通过联接加载团队?在对运动员进行迭代时 仍然懒惰地加载团队。 public class Ath
我才刚刚开始熟悉类型的概念,所以如果我没有很好地表达我的问题,请耐心等待...... 值有类型: 3 :: Int [1,2,3] :: [Int] ('c',True) :: (Char,Bool)
这里是我在 javascript 中的一个数组,效果很好! _rowData: [ { name: "Most Recent", view: "recentView" }, { nam
我正在尝试绘制 pandas Series用一条线。 这些线产生显示的输出和散点图。 import pandas as pd print(pd.__version__) ... print(type(
我正在使用 gcloud npm 模块。提前致谢。 我尝试了很多,但什么也没得到。 最佳答案 您需要对该实体进行查询并计算结果。 var query = ds.createQuery('EntityK
一些上下文 我对 libclang 不是很熟悉。我只是修改一个使用 the python bindings to libclang 的 vim 插件. 有一个 python 函数接收游标参数。当前 C
我有一个链接到 zlib v1.2.3 的程序,它出现以下错误: deflateEnd error 'no msg' kind: 'Z_DATA_ERROR': -3 该程序已成功处理许多要压缩的不同
我正在尝试通过遵循 the docs 来实现 log4rs .我的目标是将 info!("INFO") 的结果放入文件 requests.log,但出现错误: thread 'main' panick
Program type already present: org.apache.http.ContentTooLongException Message{kind=ERROR, text=Progr
当我执行 ng generate component faqs 时,我无法将新组件添加到我的 Nativescript 项目中它返回错误: Option "entryComponent" is dep
我是一名优秀的程序员,十分优秀!