indeed. I wonder how many rust idioms will change once HKT is sorted out?
(its something i'm very excited to find out :) )


On Sat, Mar 1, 2014 at 2:31 AM, Vladimir Matveev <[email protected]>wrote:

> Hi, Tobias,
>
> Yes, there is. A monad is a functor by definition, so it has to accept
> a type to produce another type. It can't be represented in another
> way, at least in Haskell. You can't come up with a sensible definition
> of a functor without HKT:
>
> class Functor (f :: *) <probably something else> where
>     fmap :: (a -> b) -> f -> f  -- ???
>
> The above does not make sense at all: you can't specify relationship
> between a and b in f's codomain, and additional parameters to the type
> class won't help.
> Similarly, you cannot make a monad without HKT too.
>
> MPTCs with functional dependencies are used in Haskell only to create
> monad *transformers*. In fact, it is possible to create transformers
> without MPTCs+FDs (and without type families), but they will be very
> inconvenient to use - you won't be to obtain transformer operations
> like (get :: StateT s m a -> s), (ask :: ReaderT r m a -> r) and
> others for your monad stack for free.
>
> 2014-03-01 2:54 GMT+04:00 Tobias Müller <[email protected]>:
> > Eric Reed <[email protected]> wrote:
> >> In general, monads require higher-kinded types because for a type to be
> a
> >> monad it must take a type variable. That is, Option<T> and List<T> could
> >> be monads, but int and TcpSocket can't be monads. So imagine we wanted
> to
> >> define a trait Monad in Rust.
> >
> > Just for my understanding. Is there an inherent reason that a monad has
> to
> > be a higher kinded type (type constructor)? Couldn't it also be
> represented
> > somehow as a multiparam trait/typeclass?
> > AFAIK, higher kinded types are standard haskell, while MPTCs are not, so
> > it's the obvious choice for haskell. Is it also for rust?
> >
> > Tobi
> >
> > _______________________________________________
> > Rust-dev mailing list
> > [email protected]
> > https://mail.mozilla.org/listinfo/rust-dev
> _______________________________________________
> Rust-dev mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/rust-dev
>
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to