Types 在键入的Racket中是否可以键入一个函数列表的第一个参数?

Types 在键入的Racket中是否可以键入一个函数列表的第一个参数?,types,scheme,racket,parametric-polymorphism,typed-racket,Types,Scheme,Racket,Parametric Polymorphism,Typed Racket,我可以在非类型Racket中编写一个名为curry all的简单函数,它接受函数列表,所有函数的第一个参数都接受相同类型的值,并生成第一个参数为curry的函数列表 (define (curry-all fs arg) (map (λ (f) (curry f arg)) fs)) 对于上述函数的运行示例 这是一个有效的函数,但鉴于其多态类型构造,我不确定是否有可能输入类型化Racket。curry本身的类型已经相当复杂,显然curry all的类型需要更加复杂 我尝试键入此函数时比较简单

我可以在非类型Racket中编写一个名为
curry all
的简单函数,它接受函数列表,所有函数的第一个参数都接受相同类型的值,并生成第一个参数为curry的函数列表

(define (curry-all fs arg)
  (map (λ (f) (curry f arg)) fs))
对于上述函数的运行示例

这是一个有效的函数,但鉴于其多态类型构造,我不确定是否有可能输入类型化Racket。
curry
本身的类型已经相当复杂,显然
curry all
的类型需要更加复杂

我尝试键入此函数时比较简单,但我很清楚它不会按我喜欢的方式运行:

(: curry-all
   (All [a c b ...]
        (Listof (-> a b ... b c)) a
     -> (Listof (-> b ... b c))))
(define (curry-all fs arg)
  (map (λ ([f : (-> a b ... b c)])
         (curry f arg))
       fs))
显然,如果所有函数都有相同的类型(这不是毫无价值的!),那么这是可行的,但是如果它们有不同的算术,即使它们的第一个参数的类型是共享的,它也会失败


有没有办法指定此函数的类型,以便它在更一般的情况下工作?

函数的arity在运行时通过提供,并且of
curryr
使用它。该代码可以修改,以提供所需的
my curry
实现,从而实现您想要的功能。您希望此函数具有什么类型?你会在什么样的环境下使用它?@SamTobin Hochstadt我在尝试用一些涉及咖喱的技巧来模拟通用接口时遇到了这个问题。如果类型可以支持,它实际上会工作。@SamTobin Hochstadt列表中的所有函数的第一个参数的类型都相同。这是统一的因素。对,但是你会如何调用你得到的函数呢?你真的想要一系列类型的序列吗?