I wonder if something like this could bring it closer to being possible?:
https://github.com/plt/racket/pull/564


On Mar 4, 2015, at 3:18 AM, Alexis King <[email protected]> wrote:

> Disclaimer: this question is both a real question and me trying to push the 
> type system to its limits, so I’m not really expecting to get a satisfactory 
> answer.
> 
> I posted a question on Stack Overflow here, but I’m guessing that this is 
> unfortunately far too localized to be answered there, so I’m posting it here 
> as well. The original question is as follows:
> 
> I can write a simple function in untyped Racket called curry-all that takes a 
> list of functions, all of which accept the same kind of value for their first 
> argument, and produces a list of functions with their first arguments curried.
> 
> (define (curry-all fs arg)
>   (map (λ (f) (curry f arg)) fs))
> For a running example of the above function, see this snippet on pasterack.
> 
> This is a valid function, but I'm not sure if it's even possible to type in 
> Typed Racket given its polymorphic typing constructs. The type of curry 
> itself is already fairly complex, and obviously the type of curry-all would 
> need to be necessarily more complex.
> 
> I made a relatively simple attempt at typing this function, though I was 
> quite aware that it would not function as I liked:
> 
> (: 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))
> Obviously, this works if all the functions have identical types (which isn’t 
> worthless!), but it fails if they have different arities, even if their first 
> arguments’ types are shared.
> 
> Is there any way to specify this function’s type so that it will work in a 
> more general case?
> 
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to