Thank you for the feedback!

I think this macro is a very nice idea and should indeed allow removing 
most compose-i functions, except maybe for compose-3 and compose-4, which 
can be examples of use of make-compose.

I added a Contributing section to the README of the Git repo: 
https://git.marvid.fr/scolobb/typed-compose#contributing . Do you think you 
can make the modifications directly a git clone of my repository and submit 
the changes to me as patches?

-
Sergiu


On Sunday, January 10, 2021 at 6:00:58 AM UTC+1 [email protected] wrote:

> 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/25e19ab5-54ea-40b2-a1c0-621982b520a9n%40googlegroups.com.

Reply via email to