- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在做函数式编程类(class)的作业之一时,发现在理解 Haskell 中的 monad 时遇到了一些问题。
所以,我们得到了一个类型:
data Annotated e a = a :# e
infix 0 :#
任务是用给定的类型签名实现一些函数,我做到了。他们通过了所需的测试(分别):
mapAnnotated :: (a -> b) -> (Annotated e a -> Annotated e b)
mapAnnotated f (x :# w) = f x :# w
joinAnnotated :: Semigroup e => Annotated e (Annotated e a) -> Annotated e a
joinAnnotated ((b :# m) :# n) = b :# m <> n
distAnnotated :: Semigroup e => (Annotated e a, Annotated e b) -> Annotated e (a, b)
distAnnotated (x :# m, y :# n) = (x, y) :# m <> n
然而,我们还被要求满足以下等式:
distAnnotated (p, q) = joinAnnotated (mapAnnotated (\a -> mapAnnotated (\b -> (a, b)) q) p)
我无法完全理解这么多函数应用程序,所以对于具有类似任务的其他类型,我只是做了看起来“自然”的事情并且它有效,但在这里它没有而且我不明白为什么,因为我什至没有看到其他方法来实现这些功能。我错过了什么?
最佳答案
让我们从麻烦的方程式开始,系统地替换定义,从里到外计算:
-- Given
mapAnnotated f (x :# w) = f x :# w
joinAnnotated ((b :# m) :# n) = b :# m <> n
distAnnotated (x :# m, y :# n) = (x, y) :# m <> n
p = x :# m
q = y :# n
-- Goal
distAnnotated (p, q) = joinAnnotated (mapAnnotated (\a -> mapAnnotated (\b -> (a, b)) q) p)
-- Right-hand side
joinAnnotated (mapAnnotated (\a -> mapAnnotated (\b -> (a, b)) q) p)
joinAnnotated (mapAnnotated (\a -> mapAnnotated (\b -> (a, b)) (y :# n)) (x :# m))
joinAnnotated (mapAnnotated (\a -> (\b -> (a, b)) y :# n) (x :# m))
joinAnnotated (mapAnnotated (\a -> (a, y) :# n) (x :# m))
joinAnnotated (mapAnnotated (\a -> (a, y) :# n) (x :# m))
joinAnnotated ((\a -> (a, y) :# n) x :# m)
joinAnnotated (((x, y) :# n) :# m)
(x, y) :# n <> m
-- Left-hand side
distAnnotated (p, q)
distAnnotated (x :# m, y :# n)
(x, y) :# m <> n
-- LHS /= RHS
因此,问题是 distAnnotated
以与 joinAnnotated
不同的顺序组合注释( m <> n
对比 n <> m
)。让他们同意的通常方法是改变joinAnnotated
以便外部注释排在第一位:
joinAnnotated ((b :# m) :# n) = b :# n <> m
这既符合单子(monad)绑定(bind)中的自然计算顺序 (m >>= f = joinAnnotated (mapAnnotated f m)
),也符合传统的从左到右的应用效果顺序 (p <*> q = ap p q = mapAnnotated (\(f, a) -> f a) (distAnnotated (p, q))
)。
关于haskell - Haskell 中的 monad 函数 dist 和 join 之间有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70057113/
在基于 Dist::Zilla 的发行版中,我想要一些仅用于测试但不安装的文件。这些是运行时不需要的模型库。 我该怎么做? 最佳答案 CPAN 发行版从不安装 t 和 xt 目录。您可以将测试和模拟库
想要编写适用于多个 Linux 发行版的脚本。还想添加检查命令,如果不存在则安装一些软件包。因此,需要一个解决方案来检查 Dist 名称(如 Debian 或 RedHat)以为此 Dist 执行正确
我正在处理我的 Net::Prober分发,使用 dzil .从下一个版本开始,我想强制执行 perl 5.10+ 的最低要求(是 5.006),因为我使用的是命名捕获 :-) 现在我放了use 5.
您的文件夹的首选标记方法是什么,以区分原始 Assets 和使用任务运行器缩小、连接等的 Assets ?我见过一堆组合,最受欢迎的是src and dist , src and build , de
运行此命令后“wwwroot/dist”和“ClientApp/dist”文件夹有什么区别以及如何正确使用它们? dotnet publish -c Release 最佳答案 wwwroot/dist
我刚刚升级到 cabal 1.22.0.0。我创建了一个全新沙箱,并添加了另一个本地包的链接,如下所示: cabal sandbox add-source /home/amy/néal/créatúr
我有一个使用 Universal 的 Anugular 6 应用程序。 通用/服务器端渲染在本地工作。 我想知道如何将此应用程序部署到 azure 。考虑到它有两个 dist 文件夹(dist、dis
我已经提取了以前在另一台计算机上运行的现有 ASP.NET Core 应用程序。 当我在这台计算机上运行应用程序时,出现以下错误: AggregateException: One or more er
我试图将我的 Angular 5 代码迁移到 Angular 6。 执行 npm 后开始出现以下问题 npm start WARNING in ./node_modules/pdfjs-
/~/@ReMix-Run/Router/dist/router.cjs.js模块分析失败:/HOME/sharib/Desktop/Full Stack Developer Tutorial/MER
我正在尝试启动并运行 J2ME Polish 示例项目,但很困难。 我正在使用带有 J2ME Polish 插件的 Netbeans 8.0.2。 当我尝试创建 J2ME Polish 项目 ( Fi
Bable 只能生成 js 文件(在 dist 文件夹中),而不生成项目目录中的其他文件(如 html、css ..)。我正在使用“build”:“babel source -d dist”。 最佳答
我需要帮助,因为我在过去 2-3 天试图解决这个问题.. 我正在 Windows-7(64 位)机器上设置 Hadoop。这是为了尝试R与Hadoop的集成。 我按照 URL - http://www
我正在尝试了解gradle的分布。在7.3.3.4节 gradle documentation 中,有以下代码示例: task dist(type: Zip) { dependsOn spiJ
我想在分发期间复制一个装满 Assets 的文件夹到我的可执行文件旁边。我如何在 .cabal 文件(或者 Setup.hs)中表示它? 目录结构: root/ dist/ -- Genera
我正在构建一个自己的工具来编译相关的js文件(用ES6编写)并将其打包到一个包中。到目前为止,它与本地文件的预期一致,但是当我涉及公共(public)模块时,例如,react 和 redux 等,情况
我正在使用 gulp 为我的 Angular 应用构建分发 (dist) 文件夹。 所以我已经收集了所有 Controller /服务 JS 文件以及我的 CSS,现在我需要处理 bower 文件夹的
我有两个带有元组(坐标)的列表,例如: some_pt1 = [(10.76,2.9),(3.24,4.28),(7.98,1.98),(3.21,9.87)] some_pt2 = [(11.87,
注意 我是新手,刚刚通过编写这段代码“吹嘘”我的方式 我在用什么 - Angular(使用 Angular Cli) - 火力基地 问题/疑虑 当我运行“ng build --watch”时,它会创建
我的大多数 JavaScript 项目都有一个包含源文件的文件夹 lib 和一个包含项目构建的文件夹 dist。 我使用 WebStorm(很棒的 IDE!),并且 WebStorm 的代码检查器和代
我是一名优秀的程序员,十分优秀!