实现解析器函子

2023-12-12

为 Brent Yorgey 的 2013 年 UPenn 工作class家庭作业,如下newtype exists:

newtype Parser a = Parser { runParser :: String -> Maybe (a, String) }

我正在尝试实施Parser as a Functor.

鉴于以下情况first函数来帮助解决这个问题:

first :: (a -> b) -> (a, c) -> (b, c)
first f (a, c) = (f a, c) 

我尝试了以下方法:

instance Functor (Parser) where
  fmap g (Parser f)  = Parser $ fmap (first g) (f . g)

然而,这是行不通的。

我认为,f的类型是String -> Maybe (a, String)。所以,我不知道如何apply a String to f为了得到Maybe (a, String).

一旦我得到一个Maybe (a, String),我相信我可以简单地运行fmap (first g) ... where ...代表Maybe.

请给我一个提示,以了解如何获得Maybe (a, String).

Since f欠一个String给出一种类型Maybe (a, String),我不知道在哪里可以找到String争论。


你做得很好。

如果我只做一个类型同义词可能会更清楚

type M a = Maybe (a,String)

你说得对,你可以使用

fmap (first g) :: Maybe (a, String) -> Maybe (b,String)
--             :: M a -> M b

并将其与

f :: String -> Maybe (a,String)
--   String -> M a

你只需要作曲String -> M a with M a -> M b to get String -> M b:

instance Functor (Parser) where
  fmap g (Parser f)  = Parser $ fmap (first g) . f

您询问是否可以从某处获取字符串。 Lambda 会为你做到这一点:\xs ->可以读作“给我一个字符串xs...”,您可以申请f到该字符串以获取某种类型Maybe (a,String)。所以你也可以写:

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

实现解析器函子 的相关文章

  • 使用 cabal new-install 重新安装相同版本的软件包

    我正在开发 Haskell 包 我还没有上传到Hackage 版本号是0 1 0 0 我正在使用新风格的 Cabal 命令 为了在我处理包的同时测试它 使库可用于测试项目 我运行cabal new install lib构建包后 然而 我注
  • 使用通用元组函数一次进行多次折叠

    如何编写一个接受类型函数元组的函数ai gt b gt ai并返回一个函数 该函数接受类型元素的元组ai 类型的一个元素b 并将每个元素组合成一个新的元组ai 那是签名应该是这样的 f a1 gt b gt a1 a2 gt b gt a2
  • GHC 可以为 monad 转换器派生 Functor 和 Applicative 实例吗?

    我正在尝试实施MaybeT本着mtl图书馆 使用这个非编译解决方案 LANGUAGE FlexibleInstances MultiParamTypeClasses UndecidableInstances import Control M
  • 用parsec解析递归数据

    import Data Attoparsec Text Lazy import Data Text Lazy Internal Text import Data Text Lazy pack data List a Nil Cons a L
  • Haskell 中函数和函子有什么区别?只有定义吗?

    在 Haskell 中 当编写函数时 这意味着我们将某个东西 输入 映射到另一个东西 输出 我尝试 LYAH 来理解 Functor 的定义 看起来和普通 Functor 一样 函数被称为函子有什么限制吗 Functor 是否允许有 I O
  • 通过 Emacs 评估 ghci 或 Hugs 中的缓冲区

    在 Emacs 中使用 sml mode 我已经能够使用以下命令将缓冲区内容直接发送到较差的 SML 进程C c C b 现在我只想用 Haskell 做同样的事情 Haskell 模式似乎不支持这一点 所以我想知道 使用 Emacs 和
  • 如何在 Yesod 中使用 CSS 框架?

    我想将 Blueprint CSS 框架与 Yesod 一起使用 有没有最佳实践 因为 Yesod 使用 CSS 模板 所以在我看来我不能直接使用 css 文件 我必须将它们重命名为 lucius files 吗 如何将 CSS 添加到 d
  • 如何从 haskell 中的 IOError 获取 errno?

    我在 haskell 平台上 GHC 6 12 1 作为 apt get 安装在 Debian Squeeze 上 鉴于我需要在与最初引发它的线程不同的线程上使用它 如何从 IOError 中获取底层 errno 我需要这个的原因是因为我正
  • Haskell 中的实例声明

    我有这两个功能 primes sieve 2 where sieve p xs p sieve x x lt xs x mod p gt 0 isPrime number number 1 null x x lt takeWhile x g
  • Haskell 中的 print 是纯函数吗?

    Is print在 Haskell 中是纯函数 为什么或者为什么不 我认为不是 因为它并不总是返回与纯函数应返回的值相同的值 类型的值IO Int并不是真正的Int 它更像是一张纸 上面写着 嘿 Haskell 运行时 请生成一个Int如此
  • Haskell:是的,没有类型类。为什么是整数?

    我有一个关于 GHCi 如何假定整数类型的问题 我正在阅读 Learn you a Haskell 是 否类型的课程 如果您想阅读全文 这里有一个链接 http learnyouahaskell com making our own typ
  • 将两个 Int 值相除以获得 Float 的正确方法是什么?

    我想分两份IntHaskell 中的值并获得结果Float 我尝试这样做 foo Int gt Int gt Float foo a b fromRational a b 但 GHC 版本 6 12 1 告诉我 无法将预期类型 Intege
  • 规范化且不可变的数据模型

    Haskell如何解决 规范化不可变数据结构 问题 例如 让我们考虑一个表示前女友 男友的数据结构 data Man Man name String exes Woman data Woman Woman name String exes
  • “Eta减少”并不总是在Haskell中举行?

    我发现我可以说 LANGUAGE RankNTypes f1 forall b b gt b gt forall c c gt c f1 f id f HLint 告诉我我可以在这里做 Eta 减少 但是 f2 forall b b gt
  • Haskell 中的中缀运算符优先级

    对于以下 Haskell 表达式 返回 a gt gt f 应该读作 返回a gt gt f or 返回 a gt gt f 这里的相关规则是什么 规则始终是函数应用程序的优先级高于任何运算符 因此 return a gt gt f 被解析
  • 如何在haskell中获取变量名称

    我来到 haskell 时有一些 c 背景知识 想知道是否有类似的 define print a printf s d n a a int a 5 print a 应该打印 a 5 这是 augustss 提到的 TH 解决方案 LANGU
  • : 中缀运算符在 Haskell 中的作用是什么?

    我正在阅读Haskell 简要介绍 http www haskell org tutorial index html 这不是那么温和 并且它反复使用 操作符而不直接解释它的作用 那么 它到底有什么作用呢 是 前置 运算符 x xs 返回一个
  • Haskell - lambda 表达式

    我试图了解什么是有用的以及如何在 Haskell 中实际使用 lambda 表达式 我不太明白使用 lambda 表达式相对于定义函数的约定方式有何优势 例如 我通常会执行以下操作 let add x y x y 我可以简单地打电话 add
  • 我该如何实现这个折叠功能呢?

    给出了两种数据类型 颜色 和 植物 data Color Red Pink White Blue Purple Green Yellow deriving Show Eq data Plant Leaf Blossom Color Stal
  • Haskell 对于 Web 应用程序来说足够成熟吗? [关闭]

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

随机推荐

  • Ruby:无法在 Windows 上安装 Watir Gem

    瓦提尔的网站说我需要 Ruby 1 8 6 我正在运行它 Windows 安装应该像这样简单gem install watir 但是当我运行它时 我得到了这个 C Users Ryguy Code gt gem install watir
  • 在循环 R 中迭代时从函数返回值

    我已经远离了 R 中的函数 但认为这是更好的做法 现在我有这个问题 我写我的函数 myFunction lt function tab takes tabular input inP lt c for x in 1 dim tab 1 it
  • 增强 PowerShell 脚本以查询 AsBuiltReport 框架内 GPO 上的端口

    我得到了当前的脚本 来自这个答案 我想改进 如果在入站方向内启用并允许这些端口 则脚本应检索所需的端口 操作 启用 方向的过滤器工作完美 但我仍然需要本地端口的过滤器仅检索定义端口内的唯一结果 但仍显示其他端口 附加问题 如何将机器的 IP
  • 长按监听器 ListActivity 类

    我有一个使用 ListView 的应用程序 我设置了 onListItemClick 事件来查看有关联系人的详细信息 我想实现 onLongListItemClick 来显示一个对话框 但我不知道为什么它不起作用 我的意思是什么也没有发生
  • Visual Studio Code c++11 扩展警告

    我正在学习 C 并且正在使用 Mac 版 Visual Studio Code 我使用 Code Runner 来运行我的程序 我的问题是 当我使用 c 11 中的某些内容 如 auto 进行变量声明时 Visual Studio Code
  • 如何自定义UITabBarController的“更多”按钮?

    我将 UITabBarController 添加为 RootView 并且我还知道当您有超过 5 个 tabBarItem 时 会自动添加 更多 按钮 所以一切都很完美 但我有两个问题 1 如何在 更多 TabBarItem上设置图像 2
  • Mapbox GL JS 在图层中的特定功能上设置 Paint 属性

    我使用 Mapbox Studio 作为地图和样式的基础 然后使用 HTML 来实现其他地图功能 其中一项功能是在悬停或鼠标输入时更改图标不透明度 当您直接在 HTML 中创建它时 我检查了其他示例和所有其他参考功能 我设法改变不透明度 但
  • 队列不自然排序[重复]

    这个问题在这里已经有答案了 可能的重复 为什么java中的PriorityQueue会出现这种奇怪的顺序 请参阅下面的代码 public static void main String args Queue
  • 使用 MIPS 汇编中的逻辑移位乘以 2 的幂

    有人可以指导我如何在 MIPS 汇编中使用移位来制作乘法代码吗 我不明白数字 2 n 如何帮助我使用奇数被乘数进行乘法 我目前有这段代码 我正在尝试制作一个计算器 text li v0 4 la a0 ask 1 syscall li v0
  • 使用 PHP 抓取完整图像 src

    我正在尝试用 php 抓取 img src 我可以很好地获取 src 但是如果 src 不包含完整路径 那么我无法真正重用它 有没有办法使用php获取图像的完整路径 如果使用右键菜单 浏览器可以获取它 IE 如何获取包含以下两个示例之一中的
  • Django 开发服务器不断注销

    我在 settings py 中将 SESSION COOKIE AGE 设置为 360 但是在我开发服务器时它总是将我注销 为什么会发生这种情况以及如何防止这种情况 Thanks 这是我的设置 py 设置 py Django settin
  • 适用于 iPhone 的 MQTT 客户端

    我正在尝试遵循这个blog用于为 iPhone 构建推送服务 该博客使用 Android 作为工作平台 但它也可以迁移到 iPhone 前提是我在 Objective C 中获得了 MQTT 客户端 但我在任何地方都找不到 我最接近的是 我
  • 使用 CsvHelper 从单个 csv 文件读取多个类

    我最近一直在使用 Josh Close 的 CsvHelper 来解析 CSV 文件 我非常喜欢用于类映射的流利 api 我正在尝试映射包含多种记录类型的 csv 文件 文件结构是 C Comment Timestamp I Class1
  • 在 Linux 中使用 C、C++ 发出系统命令

    我知道在 DOS Windows 应用程序中 您可以使用以下行从代码发出系统命令 system pause or system myProgram exe 来自 stdlib h 是否有类似的 Linux 命令 如果有 我会在哪个头文件中找
  • Django 模型类和自定义属性

    今天我遇到了一个奇怪的问题 我在 Django 中有一个模型类 并向其中添加了一个自定义属性 该属性不应保存到数据库中 因此在模型结构中不具有代表性 class Category models Model groups models Man
  • 如何在 Bootstrap 中将导航栏内容居中

    我正在学习 Bootstrap 4 导航栏 但我无法清楚地理解如何在导航栏中定位对象我希望将搜索框放置在导航栏的中心并在右侧放置一个按钮 但我只能做到这一点导航栏没有得到居中对齐 div class collapse navbar coll
  • QTabBar奇怪的线条不消失

    I have created this interface 我的问题是 如何使用我的样式表摆脱那条过时的行 黑框 objectname mainTabBarWidget QWidget 垂直布局 它有固定的高度 38px 并从左到右包含这些
  • Order by Clause 与访问中的 unique 冲突?

    请帮助我解决这个问题 因为我无法解决这个问题 当尝试执行此语句时 SELECT distinct grade FROM tblStudents ORDER BY Val grade grade 访问告诉我ORDER BY clause Va
  • javaFX 进度条更新崩溃

    我的应用程序中出现了 JavaFX jdk 1 8 0 91 上的一个非常严重的错误 其中显示并更新了几个进度条 随机或同时 有时 特别是当进度条被填满时 它有一个进度条的样式类 但有时也在什么都没有的情况下 软件块和我有这个跟踪出现几次
  • 实现解析器函子

    为 Brent Yorgey 的 2013 年 UPenn 工作class家庭作业 如下newtype exists newtype Parser a Parser runParser String gt Maybe a String 我正