9

私は、定量化された制約の導出と一緒に、trival ケースのファンクターをぶら下げずに、このブログ投稿のアプローチをより高度なデータに使用しようとしています。Identity

{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE QuantifiedConstraints, StandaloneDeriving, UndecidableInstances #-}
module HKD2 where

import Control.Monad.Identity

type family HKD f a where
    HKD Identity a = a
    HKD f        a = f a

data Result f = MkResult
    { foo :: HKD f Int
    , bar :: HKD f Bool
    }

deriving instance (forall a. Show a => Show (HKD f a)) => Show (Result f)

これにより、腹立たしい自己矛盾するエラー メッセージが表示されます。

Show (HKD f a) コンテキストから推測できませんでした:forall a. Show a => Show (HKD f a)

それについて長々と話さずにこれを行う方法はありますか

deriving instance (Show (HKD f Int), Show (HKD f Bool)) => Show (Result f)

?

4

2 に答える 2