美文网首页Haskell
Haskell实现单一类型代理泛型接口

Haskell实现单一类型代理泛型接口

作者: DarkBubble | 来源:发表于2018-03-27 09:17 被阅读10次

Haskell通过支持typeclass特性来实现带约束的泛型接口定义,即基于typeclass的polymorphic function。如果程序中现在存在一个typeclass T,并且存在若干具体类型是T的实例,那么如何用一种类型(指代数数据类型)统一管理所有的T的实例?
在Haskell中需要使用存在性量词,即forall关键词来限定数据构造子的参数为满足typeclass T类型约束的具体type。例如:

{-# LANGUAGE ExistentialQuantification #-}

class T a where 
    func :: a -> Bool

data D1 = D1
data D2 = D2

instance T D1 where
    func _ = False
instance T D2 where
    func _ = True

data DataT = forall a. T a => DataT a

d = [DataT D1, DataT D2]

s = fmap (\(DataT x) -> func x) d

上面的例子显示,我们可以使用存在性量词,前置于数据构造子,然后就可以使用泛化的构造参数,共享同一个构造子,实现了对不同类型数据(共同typeclass)的管理。注意,这种情况下,类型DataT的实例仅能够接受模式匹配和符合forall关键词后类型约束的接口。

代码经GHC 7.10版本测试通过。

相关文章

  • Haskell实现单一类型代理泛型接口

    Haskell通过支持typeclass特性来实现带约束的泛型接口定义,即基于typeclass的polymorp...

  • Java泛型

    泛型有三种实现方式,分别是泛型接口、泛型类、泛型方法。下面通过泛型方法来介绍什么是类型参数。 泛型方法声明方式:访...

  • typescript入门-泛型

    基础定义 泛型接口 泛型类 泛型约束 使用类类型

  • 泛型

    问题引入 泛型引入 如果使用泛型类或接口的时候,用Object 通配符 不设置方法类型 泛型接口 定义接口泛型 在...

  • 泛型-学习

    1、什么是泛型?参数化类型, 比如形参,不提前只能参数的类型。可以用在类、接口、方法中分别是泛型类、泛型接口、泛型...

  • spring 泛型处理

    java 泛型基础 泛型类型:泛型类型是在类型上参数化的泛型类或接口 泛型使用场景编译时前类型检查。定义为 Col...

  • flow中文文档(七)

    接口类型 接口语法 接口泛型 接口属性变量(只读和只写) 通用类型 泛型特性 接口类型 Flow中的类名义上是键入...

  • 《java编程思想 泛型》注意事项

    基本类型不能作为类型参数 解决办法:使用基本类型的包装类型和自动装箱拆箱。 无法实现同个泛型接口的多个变体 泛型参...

  • 大连滕泰科技学习笔记2020-07-10

    1,项目组6复习内容 1,1 泛型泛型定义:泛指任意类型,实际是对类型的限制。泛型类泛型接口泛型方法泛型继承-- ...

  • 008-自定义泛型,Collections

    自定义泛型 泛型类 代码实现 测试 泛型接口 代码实现 泛型方法 代码演示 测试 泛型上下边界 Collectio...

网友评论

    本文标题:Haskell实现单一类型代理泛型接口

    本文链接:https://www.haomeiwen.com/subject/vnkjcftx.html