2015-12-21 7 views

risposta

4

In questo esempio, non vi è alcuna differenza reale tra entrambi gli ordini. Il motivo è: a differenza di molti trasformatori tra cui ExceptT, il trasformatore di risorse fa non “ iniettare ” le proprie azioni nella monade di base a cui si applica, ma piuttosto iniziare l'intera azione con il passaggio dei riferimenti di rilascio.

Se si scrivono i tipi (mi riferirò MaybeT invece di ExceptT per semplicità: sono ovviamente equivalente ai fini di questa domanda), allora avete praticamente

type MaybeResourceT m a = MaybeT (IORef RelMap -> m a) 
         = IORef RelMap -> m (Maybe a) 
type ResourceMaybeT m a = ResourceT (m (Maybe a)) 
         = IORef RelMap -> m (Maybe a) 

vale a dire tipi effettivamente equivalenti. Suppongo che potresti anche dimostrarlo per le operazioni.

Problemi correlati