Haskell 如何为GHC.Generics.U1创建Mk实例?

Haskell 如何为GHC.Generics.U1创建Mk实例?,haskell,generics,ghc-generics,Haskell,Generics,Ghc Generics,我正在浏览博客上的内容。我前面的问题是 发布具有以下代码以创建代表: {-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-} {-# LANGUAGE FlexibleInstances, UndecidableInstances #-} {-# LANGUAGE TypeOperators #-} import GHC.Generics import Data.Functor.Compose class Functor

我正在浏览博客上的内容。我前面的问题是

发布具有以下代码以创建
代表

{-# 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
{-#语言多段类型类,函数依赖性}
{-#语言灵活实例,不可判定实例#-}
{-#语言类型运算符{-}
进口GHC.仿制药
导入Data.Functor.Compose
类函子f=>Mk rep f | rep->f其中
mk::f(代表a)
实例Mk(K1 i c)((->)c)其中
mk=\x->K1 x
实例(Mk l fl,Mk r fr)=>Mk(l:::r)(组合fl fr)其中
mk=Compose(fmap(\l->fmap(\r->l::r)mk)mk)
实例(Mk f')=>Mk(M1 i c f)f'其中
mk=M1 mk

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

既然
U1
没有结构,你应该能够
mk
身份中凭空一个:

import Control.Monad.Identity

instance Mk U1 Identity where
    mk = pure U1