在我的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
在我的所有类型注释中编写代码.
如果该功能不存在,也许我可以写一个"主类型类",它要求一个值满足类型类列表中的每个类型类?但我不想手工写出Real,Show和Ord等所有操作 - 有没有办法解决这个问题?
chi*_*chi 11
{-# LANGUAGE ConstraintKinds #-}
type NiceFloating a = (RealFloat a, Floating a, Real a, Show a, Ord a, Typeable a)
Run Code Online (Sandbox Code Playgroud)
这定义了想要的NiceFloating :: * -> Constraint
.