傻瓜类型系列

2023-12-02

有人可以给出一个超级简单(几行)的例子来基本了解什么类型的族可以用于什么以及它们是什么?

2+2类型族的例子?


这是一个例子:

{-# Language TypeFamilies, DataKinds, KindSignatures, GADTs, UndecidableInstances #-}

data Nat = Z | S Nat

type family Plus (x :: Nat) (y :: Nat) :: Nat where
  Plus 'Z y = y
  Plus ('S x) y = 'S (Plus x y)

data Vec :: Nat -> * -> * where
  Nil :: Vec 'Z a
  Cons :: a -> Vec n a -> Vec ('S n) a

append :: Vec m a -> Vec n a -> Vec (Plus m n) a
append Nil ys = ys
append (Cons x xs) ys = Cons x (append xs ys)

请注意,类型系列的许多/最有趣的应用程序需要UndecidableInstances。您不应该害怕这个扩展。


另一种有用的类型族是与类相关联的类型族。举一个非常人为的例子,

class Box b where
  type Elem b :: *
  elem :: b -> Elem b

一个实例Box是一种可以从中拉出某些东西的类型。例如,

instance Box (Identity x) where
  type Elem (Identity x) = x
  elem = runIdentity

instance Box Char where
  type Elem Char = String
  elem c = [c]

Now elem (Identity 3) = 3 and elem 'x' = "x".

您还可以使用类型族来创建奇怪的 skolem 变量。这最好在尚未发布的 GHC 8.0.1 中完成,它看起来像

type family Any :: k where {}

Any是一种奇特的类型。它无人居住,它不能(具体来说)是类的实例,而且它是多类的。事实证明,这对于某些目的确实很有用。这种特殊类型被宣传为安全目标unsafeCoerce, but Data.Constraint.Forall使用相似类型的族来达到更有趣的目的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

傻瓜类型系列 的相关文章

  • 简单 Haskell Monad - 随机数

    我正在尝试扩展代码这个帖子 https stackoverflow com questions 3944170 haskell and state 接受的答案 允许我能够基于以种子作为参数的函数 randomGen 调用 randomGen
  • Haskell:IORef 的性能

    我一直在尝试在 Haskell 中编码一个需要使用大量可变引用的算法 但与纯粹的惰性代码相比 它 也许并不奇怪 非常慢 考虑一个非常简单的例子 module Main where import Data IORef import Contr
  • 如何在不声明新数据的情况下更改类型(String,Int)元组的 Ord 实例?

    我正在尝试对类型列表进行排序 String Int 默认情况下 它按字符串排序 然后按整数排序 如果字符串相等 我希望它是相反的 首先比较整数 然后如果相等则比较字符串 另外 我不想切换到 Int String 我找到了一种通过定义实例来实
  • Haskell Data.Decimal 作为 Aeson 类型

    是否可以解析一个数据 十进制 https hackage haskell org package Decimal 0 4 2 docs Data Decimal html使用 Aeson 包从 JSON 获取 假设我有以下 JSON foo
  • 如何更换HXT中的节点?

    给定一个示例 xml 文件
  • 我是否需要采取明确的操作来促进与持久数据结构的共享?

    我来自命令式背景 正在尝试实现一个简单的不相交集 并集查找 数据结构 以获得在 Haskell 中创建和修改 持久 数据结构的一些练习 目标是有一个简单的实现 但我也关心效率 我的问题与此相关 首先 我创建了一个按等级并集的不相交集森林实现
  • 为什么在 where 子句中使用类型签名如此罕见?

    它是否有助于编译器优化 或者只是添加额外类型签名的多余工作 例如 人们经常看到 foo a gt b foo x bar x where bar x undefined 而不是 foo a gt b foo x bar x where ba
  • Haskell:需要了解 Functor 的签名

    有人能给我解释一下 Functor 的签名吗 Prelude gt info Functor class Functor f gt where fmap a gt b gt f a gt f b lt a gt f b gt f a 我不明
  • Haskell 项目可以使用 cmake 吗?

    我正在计划一个用 Haskell 编写的项目 也许也有一些部分是用 C 编写的 对于构建系统 我决定不选择 Haskell 程序 cabal 的常见选择 主要是因为我想了解其他语言的构建程序是如何工作的 我听说过 CMake 我认为这是一个
  • 函数式语言中的部分求值和函数内联有什么区别?

    我知道 函数内联就是用函数定义代替函数调用 部分评估是在编译时评估程序的已知 静态 部分 在 C 等命令式语言中 两者之间存在区别 其中运算符与函数不同 但是 在像 Haskell 这样的函数式语言 其中运算符也是函数 中 两者之间有什么区
  • 在 Haskell 中将字符串转换为整数/浮点数?

    data GroceryItem CartItem ItemName Price Quantity StockItem ItemName Price Quantity makeGroceryItem String gt Float gt I
  • Haskell 点运算符

    我尝试在 Haskell 中开发一个简单的平均函数 这似乎有效 lst 1 3 x fromIntegral sum lst y fromIntegral length lst z x y 但是为什么下面的版本不行呢 lst 1 3 x f
  • 如何让 do 块提前返回?

    我正在尝试使用 Haskell 抓取网页并将结果编译到一个对象中 如果出于某种原因 我无法从页面获取所有项目 我想停止尝试处理页面并提前返回 例如 scrapePage String gt IO scrapePage url do doc
  • Data.Array 有多快?

    The 文档 http haskell org ghc docs latest html libraries array 0 3 0 3 Data Array html of Data Array reads Haskell 提供了可索引数
  • 如何在 Haskell 中使 CAF 不是 CAF?

    如何将常量应用形式变成 而不是常量应用形式 以阻止它在程序的生命周期中保留 我尝试过这种方法 Dummy parameter to avoid creating a CAF twoTrues gt Bool twoTrues map Tru
  • 优化 Haskell 内循环

    仍在 Haskell 中进行 SHA1 实现 我现在已经有了一个有效的实现 这是内部循环 iterateBlock Int gt Word32 gt Word32 gt Word32 gt Word32 gt Word32 gt Word3
  • 在 Archlinux 上使用 Vim 作为 Haskell 的 IDE 目前情况如何?

    如果可行的话 我的目标是通过 YouCompleteMe 在 Vim 中完成 Haskell 的命令 在这方面 正如您在下面看到的 我还没有找到关于如何让它发挥作用的共识 相关评论的最新评论YouCompleteMe 上的问题 https
  • 如何使用类型系统编码和强制执行合法的 FSM 状态转换?

    假设我有一个类型Thing拥有国有财产A B C 合法的状态转换是A gt B A gt C C gt A 我可以写 transitionToA Thing gt Maybe Thing 这会返回Nothing if Thing处于无法转换
  • Haskell Cabal:“包间接依赖于同一包的多个版本”

    清除我的所有后cabal installed 包 我运行了以下会话 cabal update Downloading the latest package list from hackage haskell org james bast c
  • 在ghci中,如何删除现有的绑定?

    我收到一个 绑定影响现有绑定 错误 类似于以下错误this https stackoverflow com questions 2902716 in haskell what does it mean if a binding shadow

随机推荐

  • 编号点标签加上散点图中的图例

    我正在尝试在 R 中的散点图中标记点 ggplot2 使用数字 1 2 3 然后将数字与图例中的名称相匹配 1 Alpha 2 Bravo 3 Charlie 作为处理太多的方法 情节上的标签太长 我们假设这是 a df Name X At
  • 将注册表写入 hkey_current_user 而不是 hkey_users

    我尝试将注册表子项及其相应的值写入注册表 如下所示 Microsoft Win32 RegistryKey mykey mykey Microsoft Win32 Registry CurrentUser CreateSubKey Soft
  • Twitter消费者秘密真的是秘密吗?

    为了编写桌面 Twitter 应用程序 需要在 apps twitter com 上创建一个应用程序 并使用消费者 秘密 通过某种 PIN 来检索用户的授权 Twitter 上的应用程序页面显示 保守 消费者秘密 该密钥在您的应用程序中永远
  • d 列不可用。解决方案或替代方案(与 texreg 一起使用)?

    我想用dcolumn对齐表中的列texreg输出 按照用户指南中的建议texreg 然而 dcolumn似乎不适用于当前版本的 R gt install packages dcolumn Warning in install package
  • Pygame 中的鼠标悬停

    我知道这个标题听起来很像在 Pygame 中检测鼠标悬停在图像上但有一个错误 我尝试遵循该问题的两个答案 但从未成功 这是我的代码的一部分 title font3 render SQUASH True white play font1 re
  • fstream::open() Unicode 或非 Ascii 字符在 Windows 上不起作用(使用 std::ios::out)

    在 C 项目中 我想打开一个文件 fstream open 这似乎是一个主要问题 我的程序的 Windows 构建惨遭失败 文件 UTF 8 0xC3 0xA4 std string s Convert s std fstream f f
  • GTM数据层事件回调函数

    因此 我在 GTM 数据层中设置了电子商务代码 但在发送到 Analytics 之后 我希望重定向页面 所以我知道我应该使用 eventCallback 但由于某种原因它无法正常工作
  • 防止调用下一个事件处理程序

    我有两个事件处理程序连接到 Windows 窗体中的按钮单击 如下所示 this BtnCreate Click new System EventHandler new RdlcCreator FirstHandler this BtnCr
  • 架构验证android

    In java有课SchemaFactory它用于模式验证 但在 android 中不可用 还有其他选择吗 只要SchemaFactory类不需要 JNI 代码 您只需导入它即可 jar文件到你的Android项目中并直接使用它
  • 如何在mysql中获取每个相应月份的第一天?

    我想获取当年每个相应月份的第一天 例如 如果用户选择 2010 06 15 则查询要求从 2010 06 01 而不是 2010 06 15 运行 请帮助我如何计算所选日期的第一天 目前 我正在尝试使用以下 mysql 选择查询来获得所需的
  • 遍历C字符串:获取字符串的最后一个单词

    如何获取字符串的最后一个单词 从 0 换行符开始到最右边的空格 例如 我可以有这样的东西 其中 str 可以被分配一个字符串 char str 80 str my cat is yellow 我怎么会变黄呢 像这样的事情 char p st
  • 一个工作簿中的数据透视缓存,另一工作簿中的数据透视表

    我在工作表 sourceSheet 中的 例如 工作簿 sourceBook xlsx 中创建了一个数据透视缓存 我正在尝试在工作表 destinSheet 中的不同工作簿 destinBook xlsx 中创建数据透视表 Dim pCac
  • MySQL:获取数据库或表或列的字符集?

    什么是 默认 字符集 MySQL数据库 MySQL表 MySQL专栏 我就是这样做的 对于模式 或数据库 它们是同义词 SELECT default character set name FROM information schema SC
  • 我应该读/写 XML 文件以将数据保存在本地 Chrome 扩展程序中吗?

    我正在写一个简单的 chrome 扩展 我需要创建将站点 URL 添加到列表或从列表中读取的功能 我使用该列表在新选项卡中打开网站 我正在寻找一种方法来获得可以写入和读取的数据文件 我正在考虑 XML 我读到用 Javascript 更改文
  • 应用程序自动构建版本控制

    每次编译 Go 应用程序时是否可以自动增加次版本号 我想在我的程序中设置一个版本号 并带有自动增量部分 myapp version MyApp version 0 5 132 0 5 是我设置的版本号 132 是每次编译二进制文件时自动递增
  • .prepend 不是函数

    请考虑以下示例代码
  • 如何在对话框中创建编辑文本框

    我正在尝试在对话框中创建一个编辑文本框以输入密码 当我做的时候我却做不到 我是这方面的初学者 请帮助我 public class MainActivity extends Activity Button create show settin
  • 如何修复我的第一个 Hibernate 项目的错误?

    我一直在尝试制作我的第一个 Hibernate 项目 我在我的项目中添加了以下库 antlr 2 7 7 公共集合 3 2 1 dom4j 1 6 1 hibernate commons annotations 4 0 1 Final hi
  • 在回调函数中使用 ExtAudioFileWriteAsync()。无法运行

    只是在核心音频方面似乎无法走得太远 我的目标是将仪器单元捕获的音频数据写入文件 我已经在仪器单元上设置了对回调函数的调用 CheckError AudioUnitAddRenderNotify player gt instrumentUni
  • 傻瓜类型系列

    有人可以给出一个超级简单 几行 的例子来基本了解什么类型的族可以用于什么以及它们是什么 2 2类型族的例子 这是一个例子 Language TypeFamilies DataKinds KindSignatures GADTs Undeci