guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Templates for monadic procedures


From: Ludovic Courtès
Subject: Re: Templates for monadic procedures
Date: Wed, 03 May 2017 12:16:40 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)

Ricardo Wurmus <address@hidden> skribis:

> Ludovic Courtès <address@hidden> writes:
>
>> So, 
>> <https://git.savannah.gnu.org/cgit/guix.git/commit/?id=dcb95c1fc936d74dfdf84b7e59eff66cb99c5a63>
>> adds a C++-inspired template mechanism to (guix monads).  Now we can
>> write:
>>
>>   (define-template (mapm monad proc lst)
>>     …)
>>
>> That automatically leads to the definition of both a generic version
>> (same one as before, inefficient) as well as one specialized version for
>> each monad that is defined.  Each specialized version is more efficient
>> because the monad it is specialized for is known at expansion-time, and
>> thus we can inline the monad’s bind/return:
> […]
>> All this relies on a “stateful macro” that keeps state across the
>> expansion-time and run-time stages.  I think it’s a pretty fun hack!
>
> Wow!  That’s very cool!  I previously played with my own monads in Guile
> for a toy project and it bothered me that too many lookup happened at
> runtime.  Having a lookup directory at expansion time is really neat,
> though I must say that this higher level macrology would be very hard
> for me to come up with from scratch!
>
> I wonder if we could also do monad type checking at expansion or compile
> time.  That’s the last thing that’s missing here.

At this point we can distinguish between “definitely a monad” and “don’t
know” for the first argument of ‘mlet’ and the templated procedures.
That’s a start.  ;-)

I really want to look at Turnstile, which uses macrology to introduce
some typing:

  https://docs.racket-lang.org/turnstile/The_Turnstile_Guide.html

Ludo’.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]