如何在Typed Racket中编写以多态函数作为参数的高阶函数?

丹尼尔·加波诺夫(Danil Gaponov)

例如,如何map在Typed Racket中编写可与多态函数一起使用的版本我使用一个简单的id函数定义为:

(: id : (All (A) A -> A))
(define (id x) x)

当我尝试将其映射到列表时,出现错误:

> (map id '(1 2 3))

Type Checker: Polymorphic function `map' could not be applied to arguments:
Types: (-> a b ... b c) (Listof a) (Listof b) ... b -> (Listof c)
   (-> a c) (Pairof a (Listof a)) -> (Pairof c (Listof c))
Arguments: (All (A) (-> A A)) (List One Positive-Byte Positive-Byte)
Expected result: AnyValues
   in: (map id (quote (1 2 3)))
kawa川

在这种情况下,您必须手动实例化多态:

->  (map (inst identity Integer) '(1 2 3))
- : (Listof Integer) [more precisely: (Pairof Integer (Listof Integer))]
'(1 2 3)

其原因是类型化的球拍手册的说明在这里

Typed Racket的局部类型推断算法当前无法推断本身用于多态的高阶参数上使用的多态函数的类型。

(有关详细说明和示例,请参阅文档)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

实例化多态函数作为TypeScript中的参数

如何看待是多态函数的记录字段?

如何在TypeScript中编写通用的,类型安全的高阶函数?

在Racket博士中,如何编写Tetration函数

如何在子类的向量上应用多态函数

在此示例中,我们如何编写高阶函数?

如何在Typed JS中永久隐藏光标

使用多态函数作为参数

如何在Haskell 98下编码多态函数

如何在Haskell的高阶函数中使用函数的参数

如何在Typed HttpClient的示例中实现IHttpFactoryClient?

如何在Scala中访问高阶函数的参数

如何在多态函数中传递父类实例代替子类实例?

如何在不使用静态函数的情况下重写此高阶函数?

如何在数据类型中存储多态函数

如何在Python中以文件名作为参数编写函数?

如何使用列表作为参数编写函数

如何定义将多态函数应用于特定类型的高阶函数

如何在 Typed Racket 中连接数据库?

如何在 JavaScript 变量中编写的 HTML 中将事件作为函数参数传递?

如何在 Swift 中创建高阶函数?

如何在 Jest 中模拟高阶函数

如何使用作为参数传递的类的静态函数

如何在 Kotlin/Arrow 中调用依赖于多个类型类的多态函数

如何在 Python 中编写一个以文件名作为参数的函数?

高阶函数如何在 Scala 中工作?

如何在 TypeScript 中使用多态函数?

如何在 Lua 中编写 sum(f,n) 的高阶函数?

如何将静态函数作为参数传递