在我的haskell代码库中,我有许多功能可以采用多态参数。这些多态性参数都需要满足相同的类型类(RealFloat a, Floating a, Real a, Show a, Ord a, Typeable a
(,并且需要在功能类型的注释中存在这组类型类。
现在,我一直在手动编写每个功能的类型注释,但是在我的代码库中重复30次以上的类型列表,它的详细说明是冗长的,如果我发现我发现我,则必须更改每种类型的注释。需要在列表中添加另一个类型。我想知道是否有一种更简洁的方法来考虑常见的类型列表。
我真的想定义一个像typeclass NiceFloating a = RealFloat a, Floating a, Real a, Show a, Ord a, Typeable a
这样的"类型同义词",这样我就可以在所有类型的注释中编写NiceFloating a => a
。
如果该功能不存在,也许我可以编写一个"主打字机",该值要求一个值满足类型列表中的每个类型类型?但是我不想写出例如真实,表现和or and ofd of the Ording?
{-# LANGUAGE ConstraintKinds #-}
type NiceFloating a = (RealFloat a, Floating a, Real a, Show a, Ord a, Typeable a)
这定义了想要的NiceFloating :: * -> Constraint
。