Haskell语言学习笔记(57)Parsec(4)
Parser 类型
data ParsecT s u m a
type Parsec s u = ParsecT s u Identity
type Parser = Parsec String ()
- data ParsecT s u m a
ParsecT 带四个类型参数:数据流类型 s,用户状态类型 u,底层Monad类型 m,返回类型 a。
ParsecT 是一个Monad转换器。 - type Parsec s u = ParsecT s u Identity
Parsec 类型是 ParsecT 类型的特化,底层Monad类型特化为 Identity。 - type Parser = Parsec String ()
Parser 类型是 Parsec 类型的特化,数据流类型特化为 String,用户状态类型为空类型 ()。
parseTest 函数
parseTest :: (Stream s Identity t, Show a)
=> Parsec s () a -> s -> IO ()
parseTest p input
= case parse p "" input of
Left err -> do putStr "parse error at "
print err
Right x -> print x
- parseTest 函数调用 parse 函数对数据流进行解析。
- 如果匹配失败,打印出错信息。
- 如果匹配成功,输出返回值。
Haskell语言学习笔记(57)Parsec(4)的更多相关文章
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- Haskell语言学习笔记(79)lambda演算
lambda演算 根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义.函数如何被应用以 ...
- Haskell语言学习笔记(69)Yesod
Yesod Yesod 是一个使用 Haskell 语言的 Web 框架. 安装 Yesod 首先更新 Haskell Platform 到最新版 (Yesod 依赖的库非常多,版本不一致的话很容易安 ...
- Haskell语言学习笔记(20)IORef, STRef
IORef 一个在IO monad中使用变量的类型. 函数 参数 功能 newIORef 值 新建带初值的引用 readIORef 引用 读取引用的值 writeIORef 引用和值 设置引用的值 m ...
- Haskell语言学习笔记(39)Category
Category class Category cat where id :: cat a a (.) :: cat b c -> cat a b -> cat a c instance ...
- Haskell语言学习笔记(43)Parsec(2)
组合子 1 Prelude Text.Parsec Text.Parsec.String> parseTest (count 3 (char 'a')) "aaa" &quo ...
- Haskell语言学习笔记(41)Parsec(1)
Parsec Parsec是一个词法及语法分析器. 匹配字符与字符串 Prelude Text.Parsec> parseTest anyChar "a" 'a' Prelu ...
- Haskell语言学习笔记(46)Parsec(3)
Applicative Parsing 使用 Applicative 式的 Parser. 包括使用 (<$>), (<*>), (<$), (<*), (*> ...
- Haskell语言学习笔记(72)Free Monad
安装 free 包 $ cabal install free Installed free-5.0.2 Free Monad data Free f a = Pure a | Free (f (Fre ...
随机推荐
- Lock 和 synchronized 的区别
Lock 和 synchronized 的区别 Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现: synchronized在发生异常时,会 ...
- 一个经典的PHP加密解密算法
项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理.最常见的应用在用户登录以及一些API ...
- C#重新启动时,关闭较早的进程
WPF程序重新启动,如果有客户端进程存在,则关闭较早的进程 private static System.Threading.Mutex mutex; public App() { this.Start ...
- Vue2.x整合百度地图JavaScript方案
代码很整合很简单,主要记录操作思路,注意回调百度地图api的回调函数 @/utils/map.js let Map = { BaiDuMap(ak) { return new Promise(func ...
- yum下载文件的存放位置
yum下载文件的存放位置 默认是: /var/cache/yum 也可以在 /etc/yum.conf 指定 cachedir=/var/cache/yum #存放目录keepcache=1 # ...
- python中hashlib md5
如下两种方法,结果相同 import hashlib import time m = hashlib.md5() m.update(str(time.time()).encode('utf-8')) ...
- Spring IOC - 控制反转(依赖注入) - 单例和多例
Spring容器管理的bean在默认情况下是单例的,即一个bean只会创建一个对象,存在map中,之后无论获取多少次该bean,都返回同一个对象. Spring默认采用单例方式,减少了对象的创建,从而 ...
- Java-Runoob-高级教程-实例-数组:08. Java 实例 – 数组填充
ylbtech-Java-Runoob-高级教程-实例-数组:08. Java 实例 – 数组填充 1.返回顶部 1. Java 实例 - 数组填充 Java 实例 以下实例我们通过 Java Ut ...
- 6-3-1appium iOS
环境准备 brew install carthage npm i -g ios-deploy brew install libimobiledevice --HEAD brew install ide ...
- CentOs7安装gitlab(转!)
沧浪之水清兮,可以濯吾缨; 沧浪之水浊兮,可以濯吾足. ...