当前位置: 首页 > 知识库问答 >
问题:

使用Haskell的类型系统指定一个类服从额外的属性(即类型类的类型类)

年凯康
2023-03-14

当我们创建一个类型类时,通常会假设它的函数必须服从某些属性。因此,我们得到了它们各自类型类的么半群和么单律。但是,如果有某种规律,比如结合性,我想要指定多个类可以服从,也可以不服从这个规律,那该怎么办?在Haskell的类型系统中有办法做到这一点吗?这种类型类对类型类的想法在实践中是否可行?

下面是代数中一个很有启发性的例子:

class Addition x where
    add :: x -> x -> x

class Multiplication x where
    mult :: x -> x -> x

instance Addition Int where
    add = (+)

instance Multiplication Int where
    add = (*)
class (Addition x) => AssociativeAddition x where
class (Addition x) => CommutativeAddition x where

instance AssociativeAddition Int where
instance CommutativeAddition Int where
class Associative x where

instance (Associative Addition, Commutative Addition) => Addition Int where
    add = (+)

instance (Commutative Multiplication) => Multiplication Int where
    mult = (*)

共有1个答案

公良渝
2023-03-14

您实际上可以通过最近的一些GHC扩展来实现这一点:

{-# LANGUAGE ConstraintKinds, KindSignatures, MultiParamTypeClasses #-}
import GHC.Exts (Constraint)

class Addition (a :: *) where
    plus :: a -> a -> a

instance Addition Integer where
    plus = (+)

class (c a) => Commutative (a :: *) (c :: * -> Constraint) where
    op :: a -> a -> a

instance Commutative Integer Addition where
    op = plus
 类似资料:
  • 本文向大家介绍浅析C# 中的类型系统(值类型和引用类型),包括了浅析C# 中的类型系统(值类型和引用类型)的使用技巧和注意事项,需要的朋友参考一下 今天要写的东西都是书中一些概念性的东西,就当抄笔记,以提问对话的方式将其写出来吧,说不定以后面试能有点谈资~~~   Q1.C#1系统类型包含哪三点特性?   A1.C#1类型系统是静态的、显式的和安全的。   Q2.为什么称为静态类型?   A2.静

  • 您好,我正在建立一个动物园微服务,包括动物、员工、客户和价格表。我的动物微服务可以工作,但在我的员工微服务中,我遇到了一个错误,即没有为类型“EmployeeModel”找到属性“name”。在问这个问题之前,我已经在网上搜索了几个小时,还有一些类似的问题。我在模型中没有“名字”employee_name,我只是感到困惑,不知道如何修复它。任何指导/建议/信息将不胜感激:)第一次发布,所以我希望我

  • 类型系统 javascript 类型系统可以分为标准类型和对象类型,进一步标准类型又可以分为原始类型和引用类型,而对象类型又可以分为内置对象类型、普通对象类型、自定义对象类型。 标准类型 标准类型共包括了6个分别是: 原始类型(值类型): Undefined undefined Null null Boolean true String 'hello' Number 123 引用类型(对象类型):

  • Haskell是一种函数语言,它是严格类型化的,Haskell编译器在编译时知道整个应用程序中使用的数据类型。 1. 内置类型类 在Haskell中,每个语句都被视为数学表达式,并且此表达式的类别称为类型()。可以说是在编译时使用的表达式的数据类型。 要了解有关类型的更多信息,可以使用命令。以通用的方式可以将类型视为值,而可以将类型类视为一组相似类型的类型。在本章中,我们将学习不同的内置类型。 2

  • 使用Python3的函数注释,可以指定同构列表(或其他集合)中包含的项的类型,以便在PyCharm和其他IDE中进行类型暗示? int列表的伪python代码示例: 我知道使用Docstring是可能的... ... 但如果可能的话,我更喜欢注释样式。

  • 我一直试图得到我在组件中指定的protype。 在我的组件中,我有一个静态对象类型: 现在我一直在想我是否能够得到我指定的PropTypes类型。如果我记录组件的proptypes,它会显示proptypes的值是一个函数。 有没有办法让指定的类型离开那里?