通用升力等级

时间:2017-06-15 01:28:31

标签: haskell monad-transformers

我刚刚修改了以下课程:

{-# 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

这允许提升任意数量的级别,这对于适用于不同变换器堆栈大小的通用函数非常有用。两个问题:

  1. 我是否重新发明轮子?这是否已经存在,如果存在?
  2. 这是明智的做事还是愚蠢的?

0 个答案:

没有答案