Haskell 中类型表达式的 Lambda?

2024-01-16

Haskell 或特定的编译器是否有类似类型级 lambda 的东西(如果这甚至是一个术语)?

详细说明一下,假设我有一个参数化类型Foo a b并想要Foo _ b成为 Functor 的一个实例。有没有什么机制可以让我做类似的事情

instance Functor (\a -> Foo a b) where
...

?


虽然 sclv 回答了您的直接问题,但我会补充一点,“类型级 lambda”有不止一种可能的含义。 Haskell 有多种类型运算符,但没有一个真正表现得像正确的 lambda:

  • 类型构造函数:引入新类型的抽象类型运算符。给定一个类型A和一个类型构造函数F, 函数应用F A也是一种类型,但除了“这是F应用于A".
  • 多态类型:像这样的类型a -> b -> a隐含的意思是forall a b. a -> b -> a. The forall将类型变量绑定在其范围内,因此行为有点像 lambda。如果我没记错的话,这大致就是系统 F 中的“大写 lambda”。
  • 类型同义词:必须完全应用的类型运算符的有限形式,并且只能生成基类型和类型构造函数。
  • 类型类:本质上是从类型/类型构造函数到值的函数,能够检查类型参数(即,通过类型构造函数的模式匹配,与数据构造函数的常规函数​​模式匹配大致相同)并用于定义类型的成员谓词。它们在某些方面的行为更像常规函数,但非常有限:类型类不是可以操作的一流实体,它们仅对类型进行操作作为输入(而不是输出),对值进行操作仅作为输出(确实不输入)。
  • 功能依赖:与其他一些扩展一起,它们还允许类型类隐式生成类型作为结果,然后可以将其用作其他类型类的参数。仍然非常有限,例如无法将其他类型类作为参数。
  • 类型家族:函数依赖的另一种方法;它们允许以更接近常规值级函数的方式定义类型上的函数。然而,通常的限制仍然适用。

其他扩展放宽了提到的一些限制,或提供部分解决方法(另请参阅:Oleg's type hackery)。然而,几乎您在任何地方都无法以任何方式做的一件事正是您所要求的,即引入具有匿名函数抽象的新绑定范围。

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

Haskell 中类型表达式的 Lambda? 的相关文章

  • Java8 lambda 是否像匿名类一样维护对其封闭实例的引用?

    We know https stackoverflow com questions 5054360 do anonymous classes always maintain a reference to their enclosing in
  • 在依赖类型的函数式编程语言中,扁平化列表是否更容易?

    在 haskell 中寻找一个可以展平任意深度嵌套列表的函数时 即应用的函数concat递归并在最后一次迭代时停止 使用非嵌套列表 我注意到这需要有一个更灵活的类型系统 因为随着列表深度的变化 输入类型也会变化 确实 有几个 stackov
  • Java 8 Lambda 表达式编译成什么? [复制]

    这个问题在这里已经有答案了 考虑以下 Java 8 片段 public static void main String args List
  • Haskell 泛化问题(涉及列表理解)

    假设我想知道a上的所有要点 x y 矩形内的平面has 我可以使用列表推导式来计算 如下所示 let myFun2D x y x lt 0 2 y lt 0 2 现在 如果我想为一个人完成同样的事情 x y z 空间 我可以采取同样的方式并
  • Haskell 中列表列表的笛卡尔积

    给定一个长度列表的列表x所有子列表的长度都相同y 输出y x长度列表x包含每个子列表中的一项 例子 x 3 y 2 1 2 3 4 5 6 Output 2 3 8不同的输出 1 3 5 1 4 5 1 3 6 1 4 6 2 3 5 2
  • 如何在 Haskell 中漂亮地打印表格?

    我想在 Haskell 中漂亮地打印一个类似表格的数据结构 列列表 例如 Table StrCol strings a bc c IntCol ints 1 30 2 DblCol doubles 2 0 4 5 3 2 应该渲染类似 st
  • 如何在 Haskell 中制作打勾游戏的图案?

    实现有 2 个参数的函数 ticktick 第一个参数是自然数元组 定义游戏场地的行数和列数 第二个列表包含由玩家 x 和玩家 o 轮流玩的坐标给出的井字游戏比赛的记录 打印游戏的实际状态 其中游戏区域将由字符 和 界定 空方块 以及字符
  • 如何从 pandas 数据框中的列中删除字符串值

    我正在尝试编写一些代码 以逗号分隔数据帧列中的字符串 因此它成为一个列表 并从该列表中删除某个字符串 如果存在 删除不需要的字符串后 我想再次以逗号加入列表元素 我的数据框如下所示 df Column1 Column2 0 a a b c
  • Haskell / GHC - 是否有“警告不完整模式”的中缀标签/编译指示

    我正在寻找一个可以对特定的不完整模式发出警告的编译指示 它会使编译器失败并显示以下 假设的 代码 FAILIF incomplete patterns f Int gt Int f 0 0 我正在尝试使用 Arrows 编写一个 编译器 并
  • FindAll 与Where 扩展方法

    我只想知道 FindAll 是否比 Where 扩展方法更快 为什么 例子 myList FindAll item gt item category 5 or myList Where item gt item category 5 哪个更
  • 如何在haskell中获取变量名称

    我来到 haskell 时有一些 c 背景知识 想知道是否有类似的 define print a printf s d n a a int a 5 print a 应该打印 a 5 这是 augustss 提到的 TH 解决方案 LANGU
  • lambda 表达式的“类型”可以表达吗?

    将 lambda 表达式视为可调用对象的 语法糖 是否可以表达未命名的基础类型 一个例子 struct gt bool operator int l int r return l gt r Now int l int r return l
  • Haskell 输入返回元组

    我想知道 IO 函数是否可以返回元组 因为我想从这个函数中获取这些元组作为另一个函数的输入 investinput IO gt Char Int investinput do putStrLn Enter Username username
  • 如何通过“cabal build”或“stack build”构建带有图标的项目

    我想构建一个带有图标的可执行文件 通过谷歌搜索 我发现这里的说明 https wiki haskell org Setting an executable icon 但它只能通过编译源文件来工作ghc 如果我想构建一个具有可执行文件的项目c
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 什么是拉姆达?

    有人可以很好地描述什么是 Lambda 吗 我们为它们设置了一个标签 它们涉及 C 问题的秘密 但我还没有找到一个很好的定义和解释来解释它们是什么 闭包 lambda 和匿名函数不一定是同一件事 匿名函数是任何没有 或者至少不需要 自己名称
  • 管道:多个流消费者

    我编写了一个程序来计算语料库中 NGram 的频率 我已经有一个函数 它消耗一串令牌并生成一个订单的 NGram ngram Monad m gt Int gt Conduit t m t trigrams ngram 3 countFre
  • 使用 lambda 表达式注册类型

    我想知道如何在 UnityContainer 中实现这样的功能 container RegisterType
  • 如何在 emacs 中自动回答是或否

    I binded function semantic symref to key C c C r like this global set key kbd C c C r semantic symref everytime I presse
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用

随机推荐