[Haskell-cafe] How to understand such a newtype ?

zaxis z_axis at 163.com
Sat Nov 21 23:03:47 EST 2009


thanks !


Felipe Lessa wrote:
> 
> On Sat, Nov 21, 2009 at 06:20:40PM -0800, zaxis wrote:
>> newtype X a = X (ReaderT XConf (StateT XState IO) a)
>> #ifndef __HADDOCK__
>>     deriving (Functor, Monad, MonadIO, MonadState XState, MonadReader
>> XConf,
>> Typeable)
>> #endif
>>
>> In `X (ReaderT XConf (StateT XState IO) a)`, X is a type constructor, how
>> to
>> understand `(ReaderT XConf (StateT XState IO) a)` ?
> 
> Well, “ReaderT XConf (StateT XState IO) a” is *the* type :).
> It's a monad that is a Reader of XConf and has a State of XState.
> This means you can use, for example,
> 
>   ask :: X XConf
> 
> and
> 
>   get :: X XState
> 
>> And why use `#ifndef __HADDOCK__` ?
> 
> Because Haddock used to have difficulties in processing some
> directives, like that “deriving (..., MonadState XState, ...)”
> which is part of the GeneralizedNewtypeDeriving extension.
> 
> HTH,
> 
> --
> Felipe.
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
> 
> 


-----
fac n = foldr (*) 1 [1..n]
-- 
View this message in context: http://old.nabble.com/How-to-understand-such-a-newtype---tp26462332p26462674.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.



More information about the Haskell-Cafe mailing list