我在哪里可以学习高级 Haskell? [关闭]

2024-07-03

在评论中我的答案之一 https://stackoverflow.com/questions/4633584/algorithm-to-generate-all-possible-arrays-of-ones-and-zeros-of-a-given-length/4633658#4633658,SO用户sdcwc本质上指出了以下代码:

comb 0 = [[]]

comb n =
    let rest = comb (n-1)
    in  map ('0':) rest
     ++ map ('1':) rest

可以替换为:

comb n = replicateM n "01"

这让我完全惊呆了。

现在我正在寻找教授这些高级概念的教程、书籍或 PDF。我是not寻找针对初学者的“什么是 monad”教程或解释 monad 类型的在线参考资料replicateM。我想学习如何用单子思考并有效地使用它们,如果你愿意的话,单子“模式”。


采取类似的功能sequence, filterM, liftM2, join并思考它们如何为每个单子发挥作用IO, [], (->) a, Writer, State。例如,sequencefor IO monad 顺序执行 IO 操作:

 [IO a] -> IO [a]

写下签名并尝试使用它们。有些组合很有趣,有些则不那么有趣。

过滤器示例:

{-# LANGUAGE NoMonomorphismRestriction #-}
import Control.Monad
import Control.Monad.State
import Control.Monad.Reader

a = filterM (\x -> do putStrLn $ "Put " ++ show x ++ "?"
                      fmap (=="Y") getLine)

b = filterM (const [False,True])

c m xs = runState (filterM k xs) 0
              where k x = do a <- get
                             let p = a + x <= m
                             when p $ put (a+x)
                             return p

d = filterM (flip id)

a使用 IO 过滤列表 - 它向用户询问每个项目。

b不确定地过滤列表 - 每个项目都不确定地包含和不包含。结果,你得到了 powerset。 (尝试一下!)

c过滤列表,维护状态。在这种情况下,这是贪婪的背包 - 你有容量的背包m并想要插入尽可能多的项目xs.

d过滤列表,保持只读状态。这并不有趣。我使用过滤函数作为状态,这给出了flip filter.

单一功能filterM可以做所有这些事情。

如果您为其他函数编写类似的代码,您将有足够的直觉来注意到其他地方的一元函数。例如,如何获得以下函数?

dup f x = f x x

那么呢dup' f x = f x x x?

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

我在哪里可以学习高级 Haskell? [关闭] 的相关文章

  • 追踪 Haskell 中的错误

    我如何获得有关 Haskell 错误发生位置的更多信息 例如 昨天我正在开发一个 Haskell 程序 该程序解析输入文件 转换数据 然后打印出报告信息 有一次 我跑了 main 然后回来了 Prelude read parse error
  • 您最好的 Swing 设计模式和技巧是什么? [关闭]

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

    我正在尝试使用 MySQL 实现数据库连接上的工厂模式 SQL Server 面临奇怪的错误 你调用的对象是空的 在 SQL 命令对象上 internal class SqlServerDB IDatabase private SqlCon
  • ghci 中严格求和/严格折叠导致内存爆炸

    正如中提到的为什么 sum takeWhile 以下是not炸毁记忆ghci https stackoverflow com questions 14298930 why does sum takewhile 10000000 1 use
  • Java 中更高级的泛型

    假设我有以下课程 public class FixExpr Expr
  • 多态与策略模式

    两者有什么区别Strategy图案和Polymorphism在Java中 我很困惑 通过策略模式实现的任何目标基本上都可以通过多态性实现 如果我在这方面错了 请纠正我 请还提供我的例子来消除我的困惑 对我来说 链接来自CKing https
  • Java Builder 模式和“深”对象层次结构

    在 深层 对象层次结构中使用生成器模式的最佳实践是什么 为了详细说明 我探索了将 Joshua Bloch 提出的 Builder 模式应用到我的 XML 绑定代码的想法 我使用的是 SimpleXML 但这个问题适用于任何情况 我的对象层
  • 对于 Haskell 的 QuickCheck,什么是收缩?

    我正在学习 QuickCheck gt 2 6 的诀窍 但我不明白什么是心理医生 从看类型签名 http hackage haskell org packages archive QuickCheck 2 6 doc html Test Q
  • 为什么这个 HasField 实例没有被解析?

    我在用着GHC 8 2 1 我有以下模块 LANGUAGE FlexibleInstances LANGUAGE MultiParamTypeClasses LANGUAGE UndecidableInstances LANGUAGE Ty
  • 关于 java 中复杂结构的建议(DAO 和服务层链接/耦合)

    介绍 我正在尝试使用 Java 接口 抽象类和泛型创建一个相当复杂的结构 由于没有泛型经验 并且在创建良好的 OOP 设计方面只有一般经验 这开始被证明是一个相当大的挑战 我有一种感觉 我想做的事实际上无法完成 但我可以足够接近它 我将尝试
  • 如何在haskell快速傅里叶变换上应用数据并行?

    我有一个 haskell 代码来解决快速傅里叶变换 并且我想对其应用数据并行性 然而 我使用的每一个策略都会产生太多的火花 而且大多数都溢出了 有谁知道如何在以下算法上应用良好的数据并行策略 radix 2 Cooley Tukey FFT
  • 是否可以与类型类中未提及的变量关联类型同义词?

    In 关联类型同义词 http www cse unsw edu au chak papers CKP05 html Chakravarty Keller Jones 该论文似乎表明以下内容是有效的 class C a where type
  • 为什么单例会破坏开闭原则?

    谁能告诉我为什么单例会破坏开放 封闭原则 是因为从该类继承可能会出现问题吗 对于一个 开放 的类 它必须可以继承 继承是一种 is a 关系 如果您从单例类继承 则由于 is a 关系 子类的实例也是父类的实例 这意味着您可能突然拥有单例类
  • SKOS(语义网)的 Haskell 数据结构

    介绍 我正在用 Haskell 编写一个语义 Web 应用程序 使用 hsparqlhttp hackage haskell org package hsparql http hackage haskell org package hspa
  • 为什么使用 UndecidableInstances 编译此代码,然后生成运行时无限循环?

    当使用编写一些代码时UndecidableInstances早些时候 我遇到了一些我觉得很奇怪的事情 我无意中创建了一些代码 当我认为不应该进行类型检查时 LANGUAGE FlexibleInstances LANGUAGE MultiP
  • 更新列表的第 'x' 个元素 - Haskell [重复]

    这个问题在这里已经有答案了 可能的重复 替换 Haskell 中的单个列表元素 https stackoverflow com questions 5852722 replace individual list elements in ha
  • 为什么在 Haskell 中我们需要 'seq' 或 'pseq' 和 'par' ?

    我试图理解为什么我们需要标准示例代码的所有部分 a par b pseq a b 为什么以下内容还不够 a par b par a b 上面的表达式似乎非常具有描述性 尝试评估两者a and b并行 并返回结果a b 仅仅是因为效率的原因吗
  • 将多个实现隐藏在单个接口后面

    我了解策略和抽象工厂设计模式 但它们不能解决我当前的问题 我正在创建一个提供非常基本的 GUI 的 C 库 不过 我希望用户能够在编译时选择使用哪个 GUI 库 例如 Qt 或 FLTK 来实际渲染 GUI 然而 用户应该只需要了解我的库中
  • “约束不小于实例头”是什么意思以及如何解决

    我想写一些类似的东西 LANGUAGE FlexibleContexts FlexibleInstances import Data ByteString Char8 ByteString pack import Data Foldable
  • 有什么理由不对函数使用 INLINABLE pragma 吗?

    The 文档 http www haskell org ghc docs latest html users guide pragmas html states 函数 f 上的 INLINABLE f 编译指示具有以下行为 INLINE 表

随机推荐

  • Kubernetes - Ingress-nginx 路由错误(无法将前端连接到后端)

    这里需要一些认真的帮助 提前致谢 我正在尝试部署一个基于微服务的 Java 应用程序 我可以在浏览器上访问前端服务 webapp 但无法将其与后端 身份验证服务 连接 因此显示身份验证失败 HTML 登录表单表单指向 login refer
  • XML解析Golang

    设想 我有一个正在尝试解析的 XML 结构 我不知道如何设置一个结构 其中 xml 属性的值包含文本和更多嵌套值 所有其他属性都已正确设置 我不确定是否需要获取源的值并创建一个单独的解析器来检索元素的值
  • Python 类型提示、可索引对象

    我的函数需要接受一个对象 可以通过索引从中提取数据 即 AList或具有定义的实例 getitem method 我可以使用哪种类型来暗示此参数的类型 更新 据我所知目前还没有这样的类型 我尝试自己制作一个 class IndexableC
  • Python 检查类型的规范方法是什么?

    如何检查对象是否属于给定类型 或者它是否继承自给定类型 如何检查对象是否o属于类型str Beginners often wrongly expect the string to already be a number either exp
  • System V 和 Posix 信号量之间的差异

    使用 System V 和 Posix 信号量之间有何权衡 From O Reilly http www linuxdevcenter com pub a linux 2007 05 24 semaphores in linux html
  • document.getElementById("xxxxx").innerHTML 根本不起作用?

    我在尝试将字符串变量的值写入 DOM 中特定元素的特定 div 时遇到问题 假设游戏 十 document getElementById game innerHTML game 不写信给 div div 问题是下面的代码我有一个脚本 在该脚
  • 有没有办法从 php 中的沙箱中执行 php 代码

    我想从 php 执行一个 php 脚本 该脚本将使用不同的常量和已定义的类的不同版本 是否有一个沙箱 php module 我可以 sandbox script php run in a new php environment 代替 inc
  • 使用Prometheus读取csv文件

    我有 csv 格式的数据 我想将该数据添加到 prometheus 中 请帮助我 是否存在任何出口商或 API 等 您需要一个导出器 通过 HTTP 以 Prometheus 格式公开 CSV 文件中的数据 以便 Prometheus 可以
  • 这是合法的 C/C++ 吗? `int* p = (int[]) {1,2,3} ;`

    我的这个回答 https stackoverflow com a 8855343 428857生成了一些评论 声称以下构造不是合法的 C C void f int a f int 1 2 3 4 0 see 这个ideone链接 http
  • 我们如何分析损失与历元图?

    我正在训练一个语言模型 每次训练时都会绘制损失与历元的关系 我附上了其中的两个样本 显然 第二个表现出了更好的表现 但是 从这些图表来看 我们什么时候决定停止训练 提前停止 我们可以从这些图表中理解过度拟合和欠拟合还是我需要绘制额外的学习曲
  • 所有子集高效实施

    我需要获取 0 n 1 的所有子集 其中不包含 E 中的任何集合 天真的实现 from itertools import combinations n 4 E 0 1 c for k in range 1 n 1 for c in comb
  • codeigniter 中的自定义路由

    我想将 codeigniter 用于我正在从事的电子商务项目 但我认为我需要一些自定义路由 并且我不确定这是否可行 我希望能够使用这个网址 http myecommsite com store mens http myecommsite c
  • 当应用程序失去焦点时,WINAPI GetKeyboardState 行为由 GetKeyState 修改?

    调用WINAPI命令时GetKeyboardState aByteArray 从 WPF 应用程序 假设还有其他应用程序 按住SHIFT仅当应用程序具有焦点时才能正确检测到键 当应用程序没有焦点时 aByteArray VK SHIFT i
  • BaseGame Util 无法解析为类型

    我的项目需要 BaseGameUtil 库 我有 BaseGameUtil 库下载表格here https github com playgameservices android samples 但是当我将它导入到我的 android 项目
  • 两个结构的猫:不同的字段

    我有多个 csv 文件 a csv field a field b 111 121 112 122 b csv field a field c 211 231 212 232 c csv field a field b field c 31
  • iPhone 导航问题 - 嵌套推送动画可能会导致导航栏损坏

    我不断收到以下错误 2011 04 02 14 55 23 350 AppName 42430 207 nested push animation can result in corrupted navigation bar 2011 04
  • Valgrind 是否存在已知的误报问题?

    Valgrind 是否存在任何已知的误报 我得到 条件跳转或移动取决于未初始化的值 fmemopen函数 用C编写并用GCC编译 我能确定这是真的吗 编辑 是否存在抑制文件中未包含的已知问题 是否有人可以在程序中做一些事情 这些事情并不是真
  • 字符串向量的按元素串联[重复]

    这个问题在这里已经有答案了 假设我有两个字符向量 a lt c a b c b lt c 1 2 3 我如何合并它们以便我得到 ab lt c a1 b2 c3 您可以使用paste or paste0 gt a lt c a b c gt
  • 设置 iOS 设备上本机 html5 日期和时间选择器的宽度

    我正在使用带有 type date 和 type time 的本机日期和时间选择器来处理我正在开发的网站的移动版本 不过 输入字段不尊重我的 CSS Desktop iOS devices 本质上 我需要两个日期和时间输入来填充大约 50
  • 我在哪里可以学习高级 Haskell? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在评论中我的答案之一 https stackoverflow com questions 4633584 algorithm to gen