列出Haskell类型的构造函数名称?

丹·伯顿

conNameOf假设类型是的实例,则允许我显示给定数据的构造函数名称Generic

我想要的是类似的东西。对于给定的类型,我想获取构造函数名称的完整列表。例如:

data Nat = Z | S Nat
  deriving (Generic)

-- constrNames (Proxy :: Proxy Nat) == ["Z", "S"]

是否constrNames存在类似的东西如果没有,我该怎么写?

卡尔·布尔

该函数conNames从模块Generics.Deriving.ConNames在包generic-deriving提供此功能。它使用给定类型的术语,尽管未使用其值,因此可以使用undefined

{-# LANGUAGE DeriveGeneric #-}

import GHC.Generics
import Generics.Deriving.ConNames
import Data.Proxy

data Nat = Z | S Nat deriving (Generic)

main = print $ conNames (undefined :: Nat)

给出:

λ> main
["Z","S"]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章