在Haskell中分解多个类型类的简洁方法?

时间:2018-02-05 21:40:27

标签: haskell typeclass

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

如果该功能不存在,也许我可以编写一个"主类型类"这需要一个值满足类型类列表中的每个类型类?但我不想写出所有操作,例如:手工制作真实,展示和奥德是否可以解决这个问题?

1 个答案:

答案 0 :(得分:11)

username@host_address -p host_port

这定义了所需的{-# LANGUAGE ConstraintKinds #-} type NiceFloating a = (RealFloat a, Floating a, Real a, Show a, Ord a, Typeable a)