Haskell中类型类的类型级别指示器函数

ale*_*tor 6 haskell dependent-type type-level-computation

由于我的邪恶和大多数不可理解的原因,我决定想要一个类型级别函数来指示类型的类型类实例的存在.它会像这样工作:

 > :kind! HasClass Show Int
 > 'True
 > :kind! HasClass Monoid Int
 > 'False
Run Code Online (Sandbox Code Playgroud)

鉴于最近在GHC中添加了约束类型等,我觉得这可能是可能的,但是没有考虑到整洁的实现.可以吗?

Jon*_*rdy 1

为什么不只是这个呢?

\n\n
class HasClass (c :: * -> Constraint) a where\n  type Has c a :: Bool\n\ninstance HasClass c a where\n  type Has c a = 'False\n\ninstance (c a) => HasClass c a where\n  type Has c a = 'True\n
Run Code Online (Sandbox Code Playgroud)\n\n

假设您不介意一些扩展:

\n\n
{-# LANGUAGE ConstraintKinds #-}\n{-# LANGUAGE DataKinds #-}\n{-# LANGUAGE FlexibleInstances #-}\n{-# LANGUAGE KindSignatures #-}\n{-# LANGUAGE MultiParamTypeClasses #-}\n{-# LANGUAGE TypeFamilies #-}\n{-# LANGUAGE UndecidableInstances #-}\n
Run Code Online (Sandbox Code Playgroud)\n