1

我正在研究使用 GHC Generics 构建数据构造函数的博客中的内容。我之前的问题在这里

该帖子具有以下代码来创建一个Rep

{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-}
{-# LANGUAGE FlexibleInstances, UndecidableInstances #-}
{-# LANGUAGE TypeOperators #-}

import GHC.Generics
import Data.Functor.Compose

class Functor f => Mk rep f | rep -> f where
  mk :: f (rep a)

instance Mk (K1 i c) ((->) c) where
  mk = \x -> K1 x

instance (Mk l fl, Mk r fr) => Mk (l :*: r) (Compose fl fr) where
  mk = Compose (fmap (\l -> fmap (\r -> l :*: r) mk) mk)

instance (Mk f f') => Mk (M1 i c f) f' where
  mk = M1 <$> mk

是否可以创建一个类似的实例U1?如果是这样,怎么做?

4

1 回答 1

3

由于U1没有结构,您应该能够mk凭空出现Identity

import Control.Monad.Identity

instance Mk U1 Identity where
    mk = pure U1
于 2016-02-17T02:01:30.593 回答