我需要什么类型签名才能将函数列表转换为 Haskell 代码? [复制]

2024-05-03

可能的重复:
为什么 haskell 中不允许这样的函数定义? https://stackoverflow.com/questions/6168880/why-is-such-a-function-definition-not-allowed-in-haskell

我做了一个名为的 haskell 函数funlist。它的作用是获取一个起始值和一个函数列表,并将列表中的所有函数应用于起始值。

funlist thing [function] = function thing
funlist thing (function:functions) = funlist (function thing) functions
funlist _ _ = error "need a list of functions"

这个函数的问题是它有一个类型funlist :: t -> [t -> t] -> t。该类型意味着虽然 ghc 将允许不将起始值转换为完全不同类型的函数列表(例如[sin,cos,tan]将被允许​​),将起始值转换为不同类型的函数(例如show) 将生成错误,因为该函数与类型签名不匹配。

这不是该函数应该如何工作的。它应该能够获取更改起始值类型的函数列表(例如[sin,show])。这个函数基本上转换funlist 5 [sin,cos,tan,isInfinite,show] to show $ isInfinite $ tan $ cos $ sin $ 5,虽然后者有效,但前者无效。

有什么办法可以让这个功能正常工作吗?

EDIT:我知道关于. and >>>,我只是想知道是否有办法使这项工作有效。


您可以使用 GADT 编写您想要的内容:

{-# LANGUAGE GADTs #-}
module Funlist where

data F x y where
  Id :: F a a
  Ap :: (a->b) -> F b c -> F a c

-- A very round about way to write f x = x + x

f1 :: Int -> Char
f1 = toEnum

f2 :: Char -> String
f2 x = x:x:[]

f3 :: String -> [Int]
f3 = map fromEnum

f4 :: [Int] -> Integer
f4 = foldr (+) 0 . map toInteger

f_list :: F Int Integer
f_list = Ap f1 (Ap f2 (Ap f3 (Ap f4 Id)))

ap :: F a b -> a -> b
ap Id x = x
ap (Ap f gs) x = ap gs (f x)

Now ap f_list 65 is 130

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

我需要什么类型签名才能将函数列表转换为 Haskell 代码? [复制] 的相关文章

  • 为什么Haskell没有split函数? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在许多语言中 都有一个函数可以使用指定的分隔符将字符串分成几部分 它经常被称为split 您可以在 Python C Java JavaScri
  • 镜头中的观看和使用有什么区别?

    有什么区别 view MonadReader s m gt Getting a s a gt m a and use MonadState s m gt Getting a s a gt m a in 控制镜头吸气剂 https hacka
  • yesod——密码保护临时站点

    我正在尝试设置 yesod 网络服务器的临时实例 我想知道是否有一些简单的方法可以使整个站点受到密码保护 具体来说 我希望能够提示那些导航到我的网站的人提供凭据 经过身份验证后 它应该像典型站点一样运行 但如果他们无法验证自己的身份 他们就
  • 在生成此 SOP 函数时,如何修复类型错误,包括“无法对 Traversable 进行量化”?

    我只是说我什至不确定这是否可能 这是迄今为止我在 Haskell 中尝试过的最通用的事情 我正在尝试制作一个更通用的版本applyFunc在发现https stackoverflow com a 58890226 3096687 https
  • 为什么 GeneralizedNewtypeDeriving 没有安全的 Haskell?

    来自 GHC 手册 第安全语言 http www haskell org ghc docs 7 6 2 html users guide safe haskell html safe language 模块边界控制 使用安全语言编译的 Ha
  • 副作用是纯函数中找不到的一切吗?

    可以肯定地说 以下二分法成立 每个给定的函数是 要么纯粹 或有副作用 如果是这样 函数的 副作用就是纯函数中找不到的任何东西 这很大程度上取决于您选择的定义 可以公平地说 函数是pure or impure 纯函数始终返回相同的结果并且不会
  • 如何将可选标志解析为 Maybe 值?

    我正在尝试使用optparse 应用程序 https hackage haskell org package optparse applicative 0 11 0 2解析一个Maybe String但我找不到任何地方如何处理Maybe 我
  • 表达式“ap zip tail”如何工作

    我想知道怎么写f x zip x tail x 点免费 所以我使用了pointfree程序 结果是f ap zip tail ap作为 Control Monad 的函数 我不明白点自由定义是如何工作的 如果我能从类型的角度去理解的话 希望
  • Haskell printf 转字符串

    Haskell 中有等效的 sprintf 吗 我需要将双精度值转换并格式化为字符串 有没有其他方法而不使用printf什么样的功能 主要问题是要避免 Prelude gt putStrLn myDoubleVal 1 7944444444
  • 如何、为什么以及何时使用“.Internal”模块模式?

    我在上面看到了几个包裹hackage http hackage haskell org packages archive pkg list html其中包含模块名称 Internal作为他们的姓氏组成部分 例如Data ByteString
  • “反向”使用 Maybe Monad

    假设我有很多功能 f a gt Maybe a g a gt Maybe a h a gt Maybe a 我想按以下方式组合它们 如果 f 返回 Nothing 则计算 g 如果 g 返回 Nothing 则计算 h 如果其中任何一个计算
  • 将 Either 列表转换为其中包含列表的 Either 列表

    我是 Haskell 的初学者 我正在编写一些使用 Haskell 的代码Either https hackage haskell org package base 4 9 0 0 docs Data Either html用于错误处理 E
  • Haskell 测量函数性能

    在 Haskell 中 我如何 简单地 测量函数的性能 例如 运行需要多长时间 或者需要多少内存 我知道分析 但是 是否有一种更简单的方法不需要我对代码进行太多更改 测量运行需要多长时间以及需要多少内存是两个独立的问题 即 基准测试和分析
  • 对元组列表进行排序的函数 - Haskell

    抱歉 这个简单的问题只是我对 haskell 非常陌生 我正在尝试编写一个函数 order 它将对另一个函数 Frequency 生成的元组列表进行排序 频率计算列表中不同元素的数量 a给出一个这样的结果 比如 gt 频率 aabbbccc
  • 带有查询参数的渲染 url

    无法找到简单问题的解决方案 答案应该是显而易见的 如何在 hamlet 模板中使用查询参数渲染 url I e ItemsR 将生成http localhost 3000 items我如何生成类似的东西http localhost 3000
  • 地图不是接受一个函数而列表返回一个列表吗?

    map2 List a gt b gt c gt a gt b gt c map2 List f map2 List f a as bs map f a bs map2 List f as bs 这是我的讲座中的一个示例 它尝试将二元函数应
  • 为什么解析器组合器“seq”用“bind”和“return”定义?

    我正在读这个article http eprints nottingham ac uk 237 1 monparsing pdf关于解析器组合器并且不理解以下内容 他们说使用seq 见下文 导致解析器将嵌套元组作为结果 操作起来很混乱 se
  • 类型级编程有哪些示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不明白 类型级编程 是什么意思 也无法使用Google找到合适的解释 有人可以提供一个演示类型级编程的示例吗 范式的解释和 或定义将
  • Parsec 函数“parse”和类“Stream”的类型签名

    约束条件是什么 Stream s Identity t 下面的类型声明是什么意思 parse Stream s Identity t gt Parsec s a gt SourceName gt s gt Either ParseError
  • Haskell 类型定义,=> 等

    我正在使用 Learn You a Haskell 来学习 Haskell 第 54 页上有一个 像这样执行 take Num i Ord i gt i gt a gt a take n n lt 0 take take n x xs x

随机推荐

  • 通过 MailChimp 发送电子邮件

    我认为问题出在附近 api gt listSubscribers include libs mailchimp MCAPI class php options array list id gt list id subject gt Prov
  • 如何等待在react.js中渲染视图直到$.get()完成?

    您好 我正在用 Reactjs 编写一个聊天客户端 并希望使用从 REST 调用检索到的数据来渲染我的组件 但是 我的组件是在 REST 请求返回数据之前渲染的 当我在我的子组件中调用 this props 时 这会导致错误 var Mai
  • 内部没有图像的链接的 jQuery 选择器

    我绑定一个click链接功能 body on click a function do something 现在我正在寻找一个仅在链接不包含图像标签时才匹配的选择器 有点类似于a not img but img是子元素 我怎样才能做到这一点
  • 修复 Vanilla JS Accordion 以一次展开一个选项卡

    我有这个手风琴工作 但是 我试图弄清楚如何一次仅展开一个 单击另一个选项卡 另一个选项卡关闭 我尝试了不同的方法来删除该类 但没有得到预期的结果 我也一直在尝试重构for循环到 ES6 标准 但这不是一个问题 样式是 Sass 因此在 JS
  • 从文本文件加载数据然后将其存储到数据库的最快方法

    我有问题 我正在开发一个项目 但我陷入了这一部分 我想从文本文件加载数据并将其存储到数据库访问中 things 是每个文本文件内的数据 大约 12 000 行数据 每个文本文件大约需要 10 分钟来处理 注意 在存储数据之前 我将文本文件中
  • WSo2 EMM - 应用程序管理数据库错误

    运行 WSo2 EMM 1 1 0 除了一个大问题外 一切都工作正常 从我第一次单击 应用程序管理 选项卡中的应用程序那一刻起 只要服务器正在运行 WSO2EMM DB h2 db 文件就会开始稳定增长 即使完全没有任何更改 最终 它变得如
  • PL/pgSQL 中“$$”的用途是什么

    对于 PL pgSQL 来说是全新的 双美元符号的含义是什么这个功能 http postgres cz wiki PL pgSQL 28en 29 CREATE OR REPLACE FUNCTION check phone number
  • 何时对 xmlns 使用 URN

    对于 hello world 类型的 xml 文档
  • 如何在引导程序中将边框半径应用于?

    我需要一行应该是圆角的 并且行与行之间有间距 到目前为止 我尝试了如下所示的表格 曲线类 任何建议 修改都会有帮助 My CSS table curved border collapse separate table curved bord
  • 如何等待所有请求完成

    我用的是宁AsyncHttpClient从命令行程序 我需要等待所有请求结束 以便我可以安全地拨打电话close 在客户端上 挑战在于我从该计划的许多不同部分提出了许多请求 下面剥离了自己的代码 显示了我从以下位置执行嵌套 HTTP 请求的
  • 如何使PHP库松耦合? [关闭]

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

    我的 Android Studio 中有这个登录 Java 代码 private void loginUser pd ProgressDialog show LoginActivity this Loading StringRequest
  • 将 jQuery 与托管在 Github 页面上的 Jekyll 站点结合使用

    我有一个简单的 Jekyll 博客托管在 github 页面上 我已经包含了 jQuery 和 tablesorter 插件 但遇到了错误 据我所知 这个错误是由于没有以正确的顺序加载 jQuery 引起的 我的下图显示代码的顺序是正确的
  • 在数据库中存储多维数组:关系数组还是多维数组?

    我读过很多类似的帖子多维到单维 多维数据库等等 但没有一个答案有帮助 我确实在谷歌上找到了很多文档 但只提供了背景信息 并没有回答手头的问题 我有很多彼此相关的字符串 PHP 脚本中需要它们 结构是分层的 这是一个例子 A AA AAA A
  • 使用 React 组件内的 标签进行锚定导航

    我正在尝试在我的反应应用程序内的页面组件之一中设置锚点导航 我正在尝试模仿所看到的相同功能在 Draft js 上 https draftjs org docs getting started installation它使用子标题作为锚点
  • 子进程c的返回值

    我需要帮助将 状态代码 从子程序返回给父程序 它将检查状态代码 打印代码并退出父程序 这是一个班级项目 所以我会在这里放置一些相关代码 但出于明显的原因 我不会发布整个项目 我已经通过 exec 分叉并创建了子进程 父进程进行一些奇特的数学
  • 当用户关闭 IE 时显示消息框

    当用户关闭 IE 时 是否有 JavaScript 提示消息框 我尝试寻找代码示例很长一段时间但失败了 提前致谢 乔治 这是我的 html 代码 但有以下错误 有任何想法吗 为了帮助保护您的安全 Internet Explorer 已限制此
  • 每个会话的 Nhibernate 会话示例

    您好 nhibernate 的一些专业人士能给我每个会话的 Nhibernate 会话实现示例还是 unhaddins 实现吗 或者解释如何做到这一点 此致 恩迪斯 我使用 NHibernate 工作了 4 年 此前我曾与 每次操作打开会话
  • 将 IPython 控制台连接到互联网上的内核

    我一直在努力让这个工作正常进行 我已经按照我能找到的在线内容进行操作 但没有成功 例如 Ipython 文档 http ipython org ipython doc stable interactive qtconsole html 我正
  • 我需要什么类型签名才能将函数列表转换为 Haskell 代码? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 haskell 中不允许这样的函数定义 https stackoverflow com questions 6168880 why is such a function definition