- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Bartosz Milewski 所著的《程序员的类别理论》一书,第 4.3 章。
您必须编写一个 Kleisli 类别,其中态射是偏函数。这是我的尝试,但无法编译:
data Optional a = Valid a | Invalid deriving (Show)
return :: a -> Optional a
return x = Valid x
(>=>) :: (a -> Optional b) -> (b -> Optional c) -> (a -> Optional c)
f (>=>) g = \x ->
let s = f x
in | s == Valid v = g v
| s == Invalid = Invalid
在 >=>
运算符定义中,我想对中间值 s
进行模式匹配以测试是否有效
(然后调用f
)或者如果它是Invalid
(然后返回Invalid
)。我怎样才能做到这一点?
最佳答案
您可以使用case
进行模式匹配:
f >=> g = \x ->
case f x of
Valid v -> g v
Invalid -> Invalid
在您的问题中,您似乎还尝试使用守卫来进行模式匹配和绑定(bind)值。 Haskell 不允许这样做。防护只是一个 bool 值表达式,它必须为 true 才能匹配前面的(有时是可选的)模式。 Haskell 语言并没有真正将 (==)
运算符“理解”为相等的意思。它只是将其视为与其他函数一样的函数。事实上,我们可以将其定义为一种不对应于模式匹配所需的同类相等性的类型。
守卫可以使用模式(或更大范围)中的变量,但不能像模式一样绑定(bind)新变量。因此这是错误的,因为 v
是未定义的。
f >=> g = \x ->
case f x of
_ | x == Valid v -> g v
_ | x == Invalid -> Invalid
这也使得编译器基本上不可能知道你的模式是否详尽(即没有任何值在任何情况下都不匹配)
关于haskell - 如何在 Haskell 中对中间值进行模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59226842/
我是 Javascript 的新手。由于一些遗留系统,目前我正在将一些 ES6 代码转换回 ES5 代码。我转换了以下代码: $row.find('.gridCellDetailAction') .
这是我的父类,它有 trigger 方法,即 public 方法: class BaseEffect { //properties and contructor... //other
我正在关注构建你的第一个区 block 链教程 (https://www.youtube.com/watch?v=coQ5dg8wM2o&t=494s)。 我的 index.html 中有以下内容:
我是一个使用 ScrollMagic 的菜鸟,并尝试通过复制 ScrollMagic 的示例之一来学习。 http://scrollmagic.io/examples/advanced/advance
需要帮助调试一小段脚本。 我使用“masonry”插件以平铺方式排列多个 div。该脚本似乎工作正常,除了我收到错误 jQuery (intermediate value).imagesLoaded
我使用 jQuery Autosize 插件: http://www.jacklmoore.com/autosize/ 您可以在此处看到脚本本身: http://www.jacklmoore.com/
我必须遵循以下关系: class Course true, :id => false do |t| t.integer :user_id t.integer :course_id t.i
我的路线是这样的 import express from 'express' import mysql from 'mysql2' import { dbusername } from '../con
我正在尝试使用 Chart Js 库生成圆环图,结果抛出错误 Uncaught TypeError: (intermediate value).Doughnut is not a function。我
我在一个名为 StructureWindowComponent 的组件中实现事件处理,并且在 LeggerStructureWindowComponent 中也有一个覆盖它。 在基类(Structur
问题:我想将使用 xlsx 的条件格式 icon_set 应用于列,但没有获得正确值的正确箭头 这是我想要的输出: 这是我当前的输出: 这是我的代码: writer.sheets[sheet].con
这是我的 webpack.config.js "use strict"; var webpack = require('webpack') module.exports = { entry:
请帮助我。当我在 ASP.NET MVC 中使用 jQuery 时出现错误。 Uncaught TypeError: ((x.event.special[i.origType] || (interme
我是一名优秀的程序员,十分优秀!