Nice package. I don't have an account and don't know how to do pull request 
on Marvid thing, but I suggest making a macro generating `compose-n` for 
arbitrary (statically known) n, and export it along side with the 
predefined compose-n functions, something along these lines:

#lang typed/racket/base

(provide make-compose
         compose-3 compose-4)

(require (for-syntax racket/base
                     racket/match
                     racket/list
                     racket/syntax
                     syntax/parse))

(define-for-syntax (make-compose-type n)
  (with-syntax* ([(t ...) (generate-temporaries (make-list n 't))]
                 [a (generate-temporary 'a)]
                 [(_ ... t₀) #'(a t ...)]
                 [(F ...)
                  (let step ([u #'a] [ts (syntax->list #'(t ...))])
                    (match ts
                      ['() '()]
                      [(cons t ts*) (cons #`(#,t → #,u) (step t ts*))]))])
    #'(∀ (a t ...) (F ... → t₀ → a))))

(define-syntax make-compose
  (syntax-parser
    [(_ n:nat)
     (with-syntax* ([(f ...) (generate-temporaries (make-list (syntax-e 
#'n) 'f))]
                    [x (generate-temporary 'x)]
                    [T (make-compose-type (syntax-e #'n))]
                    [body (foldr (λ (fᵢ res) #`(#,fᵢ #,res)) #'x 
(syntax->list #'(f ...)))])
       #'(ann (λ (f ...) (λ (x) body)) T))]))

(define compose-3 (make-compose 3))
(define compose-4 (make-compose 4))
;; and so on



On Monday, January 4, 2021 at 12:52:11 PM UTC-8 unlimitedscolobb wrote:

> Hello,
>
> I am glad to announce typed-compose, a small package defining some 
> utilities for composing functions in Typed Racket:
>
> https://pkgd.racket-lang.org/pkgn/package/typed-compose
>
> Typed Racket's compose only takes two arguments, because in general it is 
> difficult to specify that the return types and the argument types should be 
> the same for two successive functions in the argument list. This package 
> defines some further utilities to allow compose-ing more than two 
> functions more comfortable in Typed Racket.
>
> This is my first ever Racket package, so I'm taking all kinds of feedback.
>
> -
> Sergiu
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/75c18da4-1403-4f70-8c58-08511d21c71an%40googlegroups.com.

Reply via email to