haskell-jp / random #92 at 2021-07-14 03:25:16 +0900

higher kinded data の使いどころかと思ったけど微妙に babies とは違う型クラスができた……
-- barbies
class FunctorB (b :: (k -> Type) -> Type) where
  bmap :: (forall a . f a -> g a) -> b f -> b g

-- 自作
class FunctorB b where
  bmap :: (Functor f, Functor g) => (forall a. f a -> g a) -> b f -> b g

これ ↓ を
data Foo =
  Foo [(Bar, Buzz)]

こう ↓ したかった
data Foo f =
  Foo (f [f (f Bar, f Buzz)])

barbies だとこう ↓ なる
data Foo f =
  Foo (f [(bar, Buzz)])