# [racket] [typed racket] typing monads

On Thu, Oct 20, 2011 at 2:52 PM, Eric Tanter <etanter at dcc.uchile.cl> wrote:
>* Thanks Sam,
*>*
*>* Actually, that's not what we're after.
*>*
*>* In untyped Racket, we have a struct monad:
*>*
*>* (struct monad
*>* (;; A -> M A
*>* return
*>* ;; A -> (A -> M B) -> M B
*>* bind))
*>*
*>* Then we have several instantiations (exception, state, what-have-you):
*>* (define my-fancy-monad (monad (lambda ...) (lambda ...)))
*>*
*>* It is feasible to type the particular instantiations (the return/bind functions we need in each case), but we'd like to type the monad struct itself.
*>* The question is what to do about M?
*
Unfortunately, Typed Racket doesn't support higher-kinded type
parameters, which is what you would need here.
If you have an example of how you want to use this where the solution
I gave earlier doesn't work, I can probably give a better answer of
how to handle it.
--
sam th
samth at ccs.neu.edu