DataKinds扩展将“值”(即构造函数)提升为类型。例如,True
和False
成为不同类型的Bool
。
我想要做的是相反的,即将类型降级为值。具有此签名的函数可以正常:
demote :: Proxy (a :: t) -> t
我实际上可以这样做,例如Bool
:
class DemoteBool (a :: Bool) where
demoteBool :: Proxy (a :: Bool) -> Bool
instance DemoteBool True where
demoteBool _ = True
instance DemoteBool False where
demoteBool _ = False
但是,我必须为我想要降级到它的价值的任何类型编写实例。有没有更好的方法做到这一点,不涉及太多的样板?
答案 0 :(得分:11)