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.