Haskell 函数 (a -> [b]) -> [a -> b]

2023-12-19

我有一个函数seperateFuncs这样

seperateFuncs :: [a -> b] -> (a -> [b])
seperateFuncs xs = \x -> map ($ x) xs

我想知道相反的情况是否存在,即是否有一个函数

joinFuncs :: (a -> [b]) -> [a -> b]

我认为不是(主要是因为列表的长度不固定),但也许我会被证明是错的。 那么问题是有一些数据类型f它有一个函数 :: (a -> f b) -> f (a -> b)?


你可以概括一下seperateFuncs to Applicative (or Monad)非常干净:

seperateFuncs :: (Applicative f) => f (a -> b) -> (a -> f b)
seperateFuncs f x = f <*> pure x

以无点风格编写,你有seperateFuncs = ((. pure) . (<*>)),所以你基本上想要unap . (. extract),如果您以尖锐的方式编写它,则给出以下定义:

joinFuncs :: (Unapplicative f) => (a -> f b) -> f (a -> b)
joinFuncs f = unap f (\ g -> f (extract g))

这里我定义Unapplictaive as:

class Functor f => Unapplicactive f where
    extract  :: f a -> a
    unap     :: (f a -> f b) -> f (a -> b)

为了得到leftaroundabout 给出的定义 https://stackoverflow.com/a/13766031/824425,您可以给出以下实例:

instance Unapplicative [] where
    extract = head
    unap f = [\a -> f [a] !! i | i <- [0..]]

instance Unapplicative ((->) c) where
    extract f = f undefined
    unap f = \x y -> f (const y) x

我认为很难想出一个“有用”的功能f :: (f a -> f b) -> f (a -> b)对于任何f那不像(->).

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

Haskell 函数 (a -> [b]) -> [a -> b] 的相关文章

随机推荐

  • VSTS 查找两个版本之间的工作项

    要比较当前版本和先前版本之间的相关工作项 我可以使用以下内容 是否可以创建查询来获取两个版本之间的相同工作项 或者也可以使用 VSTS Rest API 我这样做的原因是创建一个功能 gt 故事 gt 任务列表来填充发行说明 使用上面的 U
  • SmartGWT:隐藏分组网格中的列(这使得组)

    我有一个 SmartGWT 网格 我想在其中显示来自 JBoss Server 的一些数据 它按我从 JSON 获取的一个文本字段进行分组 所以 但我希望这个文本字段只出现在每个组的标题中 当我在这个字段上执行 hide Field 时 我
  • 在 WPF 的代码隐藏中为 ListBox 创建 ItemTemplate

    我正在尝试以编程方式为列表框创建 ItemTemplate 但它不起作用 我知道在 XAML 中我可以有类似的东西
  • 使用 DynDNS 和 WebRequest C# 获取公共 IP

    我使用此代码来获取公共IP地址 感谢这篇文章如何获取运行 C 应用程序的服务器的 IP 地址 https stackoverflow com questions 1069103 how to get my own ip address in
  • 通过curl连接youtube?

    我已经通过curl连接youtube从我的服务器上传视频 以下是我的代码
  • Mat-Table :将一行滚动到角度 2 的视图中

    使用角度材料垫表时是否可以将特定数据行滚动到视图中cdk table 我正在尝试实现键盘滚动 但没有成功 我现在已经可以使用了 不完美但有效 请参阅我之前的消息中提到的堆栈闪电战示例 https stackblitz com edit me
  • AVFoundation,如何在captureStillImageAsynchronouslyFromConnection时关闭快门声音?

    我正在尝试在相机实时预览期间捕获图像 由 AVFoundation 提供从连接异步捕获静止图像 https developer apple com documentation avfoundation avcapturestillimage
  • 如何重复从套接字读取数据?

    首先 我使用 C 进行编码 我正在通过套接字将不同大小的数据写入设备 写入数据后 我想从套接字读取 因为设备在完成处理所有数据后会写回错误代码 完成消息 目前我有这样的事情 byte resultErrorCode new byte 1 r
  • 将编程鼠标事件发送到 X

    我有点新XLinux 上的开发 我想知道以编程方式发送光标事件的最佳实践 或资源链接 是什么 将光标移动到标准化 X Y 创建鼠标右键 左键单击等 理想情况下 这将是C C 我玩过QtQCursor但我想知道实现这一目标的原始方法 如果您想
  • 在 JSONObject 中填充引号

    我正在构建一个 JSON 字符串以发送到我的 Web 服务 由于其中之一是用户输入的 因此可能存在双引号 我试图通过逃避来解决这个问题 String strValue height of 6 JSONObject json new JSON
  • 如何让 div 包围浮动的孩子?

    考虑以下代码 其中span元素漂浮在内部div 我怎样才能使div环绕浮动子元素 以便 1px 边框环绕子元素 div style border 1px solid 000 span Content span span Content sp
  • 如何列出我的应用程序支持的语言

    该应用程序有许多本地化文件夹 values cs values da values de values es 如何在运行时枚举所有支持的语言 当然 我可以定义一些常量来列出所有值 cs da de 但希望避免这样做 我认为这可行 enum
  • 升级到 AngularFire 5.0

    我正在使用 ionic 3 和 firebase 到目前为止 我使用 angularfire 4 0 以下代码为我提供了来自 firebase 的数据的可观察值 obsToData FirebaseObjectObservable
  • 扇形陷阱和裂缝陷阱 - 数据库

    谁能告诉我什么是裂缝陷阱 也许也是粉丝陷阱 因为我不太清楚 另外 请提供易于理解的示例 通过 Chen 符号 到目前为止我的理解 我理解 Fan trap 是 M 1 1 M 这表明实体之间的路径是不明确的 我明白那个 例如 如果 M 代表
  • 尽管连接字符串超时 3 秒,Sql 连接仍等待 15 秒

    我有一个通过本地网络使用 Microsoft SQL 2008 服务器的网站 有时 SQL Server 机器会重新启动 因此网站无法连接到数据库 如果机器已启动并运行 则will反应快 如果已关闭 则无需等待 15 秒 3秒就可以了 我想
  • 异常助手中缺少“查看详细信息”

    最近 在 Visual Studio 2015 update 3 中 异常助手的行为发生了变化 我不再看到 查看详细信息 选项 并且堆栈跟踪也不会展开 如果我选择 使用托管兼容模式 它就会起作用 所有 C 项目都会发生这种情况 另一件事是
  • 通过 Applescript 发送电子邮件时发件人不正确

    下面的 Applescript 是我多年来使用的形式 基本上是一种众所周知的使用 Applescript 发送电子邮件的方法 tell application Mail set newMessage to make new outgoing
  • cakephp 2 css、javascript 和链接在本地计算机/localhost 上不起作用

    我应该在 webroot 文件夹上使用什么 htaccess 设置 似乎这是布局中所有链接不起作用的罪魁祸首 这是 webroot 文件夹内的 htaccess 代码
  • 使用 Powershell 替换列值

    我正在尝试循环遍历 csv 并替换名为的列中的任何值Enabled from True to A Import Csv test csv Where Object Enabled eq True gt what goes here to r
  • Haskell 函数 (a -> [b]) -> [a -> b]

    我有一个函数seperateFuncs这样 seperateFuncs a gt b gt a gt b seperateFuncs xs x gt map x xs 我想知道相反的情况是否存在 即是否有一个函数 joinFuncs a g