我刚刚修改了以下课程:
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
import Control.Monad.Trans.Class (MonadTrans, lift)
class GenericLift m1 m2 where
genericLift :: m1 a -> m2 a
instance GenericLift m m where
genericLift = id
instance (MonadTrans t, Monad m2, GenericLift m1 m2) => GenericLift m1 (t m2) where
genericLift = lift . genericLift
这允许提升任意数量的级别,这对于适用于不同变换器堆栈大小的通用函数非常有用。两个问题: