小编vlo*_*pez的帖子

在Template Haskell splice中规范化类型族实例

我正在使用该genifunctors包为其定义涉及类型族的类型生成仿函数实例.

第一个模块定义数据类型本身:

{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
module Temp where

data Record (p :: (*,*))

type family Fst p where Fst (Record '(a,b)) = a
type family Snd p where Snd (Record '(a,b)) = b

data Bar s = Bar {
  field_a :: Fst s,
  field_b :: Snd s
}

newtype Baz a = Baz { getBaz :: Bar (Record '(Maybe a, [a])) }
Run Code Online (Sandbox Code Playgroud)

这与预期一样:

?> import Temp 
?> :t Baz …
Run Code Online (Sandbox Code Playgroud)

haskell ghc type-families template-haskell data-kinds

7
推荐指数
0
解决办法
187
查看次数