在Haskell中考虑多个类型的一种简洁方法



在我的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

相关内容

最新更新