用pointfree风格写f?

2024-03-15

说我有功能

g :: a -> b, h :: a -> c 

and

f :: b -> c -> d. 

函数可以写吗

 f' :: a -> a -> d 

给出的

f' x y = f (g x) (h y) 

点自由风格?

可以写一个函数

f' a -> d, f' x = f (g x) (h x) 

通过设置以点自由样式

f' = (f <$> g) <*> h  

但我不知道如何处理更一般的情况。


We have:

k x y = (f (g x)) (h y)

我们希望写k以无点风格。

第一个参数传递给k is x。我们需要做什么x?好吧,首先我们需要调用g在其上,然后f,然后做一些奇特的事情来应用它(h y).

k = fancy . f . g

这是什么fancy? Well:

k x y = (fancy . f . g) x y
      = fancy (f (g x)) y
      = f (g x) (h y)

所以我们渴望fancy z y = z (h y)。减少 eta,我们得到fancy z = z . h, or fancy = (. h).

k = (. h) . f . g

更自然的思考方式可能是

                             ┌───┐           ┌───┐
                        x ───│ g │─── g x ───│   │
                      /      └───┘           │   │
               (x, y)                        │ f │─── f (g x) (h y)
                      \      ┌───┐           │   │
                        y ───│ h │─── h y ───│   │
                             └───┘           └───┘

                      └──────────────────────────────┘
                                      k

Enter Control.Arrow https://hackage.haskell.org/package/base-4.9.0.0/docs/Control-Arrow.html:

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

用pointfree风格写f? 的相关文章

  • 如何为 GHCi 设置程序的命令行参数?

    假设某个 Haskell 文件被执行 runghc Queens hs gecode compile 现在 这失败了 我想用它来调试它ghci 我如何传递选项gecode compile进入程序 所以getArgs会正确读取吗 Thanks
  • 由相同数据类型的不同构造函数共享的 Haskell 记录访问器

    关于 Haskell 记录的基本问题 如果我定义这个数据类型 data Pet Dog name String Cat name String deriving Show 以下作品 main do let d Dog name Spot c
  • 使用 Rank2Types 相比 RankNTypes 有什么优势吗?

    据我所知 仅 针对 2 级类型存在可判定的类型检查算法 GHC 是否以某种方式利用了这一事实 它有任何实际意义吗 是否还有 2 级类型的主要类型概念和类型推断算法 如果是的话 GHC 使用它吗 与Rank 2类型相比 Rank 2类型还有其
  • 何时使用 STRef 或 IORef?

    STRef 和 IORef 之间到底有什么区别 何时使用它们 据我所知 它们都是可变状态 那么它们存在的意义是什么 您可以在其中做更多事情IO单子比ST单子 后者提供可变引用 前者提供可变引用 异常捕获 线程 当然还有IO 使用可以解决问题
  • Haskell 程序的 -hc 配置文件中的 PINNED 是什么意思?

    我正在尝试分析我的应用程序 分析内存使用情况时 hcRTS 选项 我注意到很多内存标记为 PINNED 当与 hy内存被标记为ARR WORDS 该程序使用以下命令创建 2400 2400 双精度矩阵Data Packed Matrixhm
  • Haskell 长度函数实现

    我正在学习 Haskell 编程 我试图理解列表是如何工作的 因此我尝试编写两个可能的length功能 myLength a gt Integer myLength foldr x gt 1 0 myLength1 a gt Integer
  • Haskell 有反向模式自动微分的工作实现吗?

    我见过的 Haskell 中最相关的实现是前向模式http hackage haskell org packages archive fad 1 0 doc html Numeric FAD html http hackage haskel
  • Cabal 在 NixOS 上构建时找不到外部库

    我正在尝试使用 cabal2nix 在 NixOS 上构建一个内部 Haskell 项目 它包装 并因此依赖 一个外部库 在 Ubuntu 上可以通过以下方式构建 wget设置源 然后运行make make install ldconfig
  • 运营商部分应用

    如果我想在字符末尾添加一个空格以返回列表 如果我不传递任何参数 我将如何通过部分应用程序来完成此操作 还有类型是 space Char gt Char 由于使用 和 运算符出现 解析错误 我在末尾添加空格时遇到问题 到目前为止我所拥有的是
  • 使用 Template Haskell 生成函数

    是否可以使用 Template Haskell 定义函数 例如 convertStringToValue String gt Int convertStringToValue three 3 convertStringToValue fou
  • Foldl 是否比其严格的表亲 Foldl' 更好?

    Haskell 有两个列表左折叠函数 foldl 以及 严格 版本 foldl 不严格的问题foldl是它建造了一座重击塔 foldl 0 1 5 gt 0 1 2 3 4 5 gt 15 这会浪费内存 并且如果列表中的项太多 可能会导致堆
  • 在 Haskell/Yampa 和 HOOD 中调试游戏对象的输出

    我一直坚持使用 Haskell Yampa Arrows with HOOD 为我的游戏对象生成调试输出 我的引擎基本上运行一系列游戏对象 这些对象产生输出状态 线 圆 然后进行渲染 data Output Circle Position2
  • 机器和管道(或其他类似的库)之间的概念区别是什么?

    我想学习这个概念 以便我能够理解和使用诸如machines http hackage haskell org package machines 我试着跟随R nar Bjarnason 关于机器的演讲 https dl dropbox co
  • 如何在 Windows 7 中配置 cabal?

    我已经在Windows 7中安装了Haskell Platform 2012 我在控制台中编写cabal update我收到消息说有新版本的阴谋集团 我写的cabal install cabal install 安装完成后 它告诉我 cab
  • 由于标志字节串 -lt-0_10_4,无法使用 Stack 构建 hello world 程序

    通过生成一个裸露的 hello world 项目 stack new myproject simple 每当我跑步时stack setup stack init or stack build我总是出现以下错误 Downloading lts
  • 函数式编程是否需要新的命名约定?

    我最近开始使用 Haskell 学习函数式编程 并在 Haskell 官方 wiki 上发现了这篇文章 如何阅读哈斯克尔 http www haskell org haskellwiki How to read Haskell What t
  • Haskell 中美元符号 ($) 和 id 函数之间有关系吗?

    这几天我正在读一篇评论莫纳德挑战 http mightybyte github io monad challenges 我强烈推荐给像我这样的 Haskell 初学者 我最终得到了这个线程 https news ycombinator co
  • 通过 Emacs 评估 ghci 或 Hugs 中的缓冲区

    在 Emacs 中使用 sml mode 我已经能够使用以下命令将缓冲区内容直接发送到较差的 SML 进程C c C b 现在我只想用 Haskell 做同样的事情 Haskell 模式似乎不支持这一点 所以我想知道 使用 Emacs 和
  • Haskell,optparse-generic 的未命名命令行参数

    我在用着optparse 通用 https hackage haskell org package optparse generic解析名为的程序的命令行参数example 我有一个带有命名字段的数据类型 记录语法 例如 data Exam
  • ErrorT 已弃用,但 exceptT 不适合

    我有一个一元计算 在某些时候 由于单子模式匹配 它开始需要 MonadFail 约束 我的简单解决方法是使用以下命令运行它 fmap either error id runErrorT 然而哎呀 Deprecated Use Control

随机推荐

  • 在java中解析XML时没有工作ID属性

    我目前正在开发一个图形 XML 编辑器 对于该编辑器 我必须能够通过其 ID 属性访问各个元素 我已经建立了一个 XML 模式 在其中定义了 ID 属性 我使用 javax xml parsers DocumentBuilderFactor
  • 使用拆分器使 ItemsControl 子项可调整大小

    我想将小部件插入我的ItemsControl并使它们可调整大小 我该如何实现这一目标 这是我的 XAML
  • 使用 numpy 实现最大/平均池化(带步长)

    我想知道如何使用 numpy 实现简单的最大 均值池 我正在读书使用 numpy 进行最大池化和平均池化 https stackoverflow com questions 42463172 how to perform max mean
  • 如何动态更改 SQLAlchemy 声明性模型上的列类型?

    我在生产中运行 mysql 但想在内存数据库中的 sqlite 中运行简单的测试 旧版 mysql 数据库的表中包含 mysql 特定类型的列 这些列是在声明性模型中声明的 子类 declarative base 我想运行一些简单的测试而不
  • VB.Net Linq to Entities Null 比较 - 'Is Nothing' 或 '= Nothing'?

    我们在 VB Net 中有多个项目 使用 Net Framework 4 和 Linq to Entities 进行许多 SQL 查询 迁移到 EF 对我们来说是一个新的转变 使用它大约 4 6 个月 并且得到了高层管理人员的支持 因为我们
  • 获取函数的返回值

    假设我有一些运行一些代码的函数 然后return一些东西 像这样 function something some code return some whatever 因此 如果我想提取在函数中生成的数据 的新值 some 我该怎么办呢 例如
  • 如何将 Intl.NumberFormat 与本机反应一起使用?

    我试图在本机反应中将数字转换为价格格式 如何使用https developer mozilla org en US docs Web JavaScript Reference Global Objects NumberFormat http
  • 如何使类属性专属于超类

    我有一个关于行星的大师班 class Planet def init self name self name name def destroy self 我还有一些继承自的类Planet我想让其中之一无法被摧毁 而不是继承destroy功能
  • 使用动态 Linq 实体框架查询抛出奇怪的异常

    我有一个画廊实体框架类 我正在尝试使用 ScottGu 博客上发布的动态 Linq 库来查询实体集 失败的代码行如下 return context Galleries OrderBy sidx sord Skip page rows Tak
  • 二叉搜索树中节点的公平删除

    BST中删除节点的思路是 如果该节点没有子节点 则删除该节点并将父节点指向该节点的指针更新为空 如果该节点有一个子节点 则通过更新该节点的父节点指向其子节点的指针来用其子节点替换该节点 如果该节点有两个子节点 则找到该节点的前驱节点并将其替
  • SVG 中的动画虚线

    我需要为 SVG 中的虚线设置动画 My Work paths fill none stroke grey stroke dasharray 1440 stroke width 1440 stroke linejoin round mask
  • 从 Google 相册应用获取视频(非本地)

    随着谷歌照片应用程序 我正在尝试选择一个未缓存在设备上的视频 我正在使用ACTION 获取 内容意图 启动选项对话框 然后从那里我选择 Google Photos 应用程序 选择本地视频时 它会返回这种形式的 Uri 内容 媒体 外部 视频
  • 在 GSP 中导入和使用 Groovy 代码

    我正在尝试在 GSP 中使用常规函数 请帮忙 因为我正要在这里剃掉我的头发 在我的普惠制顶部我有 我的 GSP 里面有 p I have been in the heating and cooling business for p 和我的
  • ActiveAdmin:如何覆盖索引控制器操作:nil:NilClass 的未定义方法“base”

    我试图覆盖 ActiveAdmin 控制器的索引操作 以显示 current user 的结果而不是所有结果 controller do def index user tasks UserTask where user id gt curr
  • 在 C++ 中从 EnumWindows 生成的过滤/解析列表

    我正在使用以下代码来获取我的计算机上运行的窗口列表 include
  • 有用(困难)的 SQL 脚本库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何定义 MKAnnotationView 重叠的顺序?

    我的地图中有几个 MKAnnotations 及其相应的视图 有时会变得非常拥挤 现在 我的应用程序中的注释有两种风格 有些必然会保留在原处 而另一些则会随着时间的推移而移动 我更喜欢让视觉上更稳定的物体出现在背景中 而移动的物体总是在它们
  • 在 C# 中确定会话变量为 null 或空的最佳方法是什么?

    检查 ASP NET C 中会话变量是否存在的最佳方法是什么 我喜欢用String IsNullOrEmpty 适用于字符串 想知道是否有类似的方法Session 目前我知道的唯一方法是 var session if Session var
  • Finder 窗口刷新问题(Yosemite)

    我正在开发 Finder Sync 扩展以在文件和文件夹上应用徽章 我想刷新 Finder 应用程序中特定文件 文件夹的图标 有没有办法在 mac OS Yosemite 上以编程方式刷新查找器窗口 除了创建和删除文件 我也有这个问题 我曾
  • 用pointfree风格写f?

    说我有功能 g a gt b h a gt c and f b gt c gt d 函数可以写吗 f a gt a gt d 给出的 f x y f g x h y 点自由风格 可以写一个函数 f a gt d f x f g x h x