首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Haskell -如何在IO函数中使用?

Haskell -如何在IO函数中使用?
EN

Stack Overflow用户
提问于 2021-09-18 16:58:35
回答 1查看 104关注 0票数 0
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
main ::  IO ()
main = do
    result <- function_returns_io_maybe -- type of result is Maybe x
    -- if result maybe is Just, run function that return IO() with result, else do not run function.

如何在IO函数中使用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-18 19:33:57

只要表达式具有正确的一元类型,就可以在do块中写入任何表达式。特别是,您可以进行案例分析:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
main = do
  result <- something
  case result of
    Just r -> somethingElse r
    Nothing -> return ()

(其中something :: IO (Maybe X); somethingElse :: X -> IO ())

就我个人而言,我会用一个lambda案例和一个绑定来写这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{-# LANGUAGE LambdaCase #-}

main = something >>= \case
  Just r -> somethingElse r
  Nothing -> return ()

Maybe上的案例分析用maybe组合器编写得更简洁:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
main = maybe somethingElse (return ()) =<< something

Control.Monad.Extra.whenJustM捕获了整个类型的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Control.Monad.Extra (whenJustM)

main = whenJustM something somethingElse
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69239559

复制
相关文章
从惰性IO说起_Haskell笔记6
从硬盘读文件时并不会一次性全读入内存,而是一点一点的流式读取。文本文件的话,默认buffer是line-buffering,即一次读一行,二进制文件的话,默认buffer是block-buffering,一次读一个chunk,其具体大小取决于操作系统
ayqy贾杰
2019/06/12
2.3K0
铁定不纯的IO_Haskell笔记5
一直有个疑惑,Haskell号称纯函数式语言,那么铁定不纯的场景(肯定有副作用,或者操作本身就是副作用)如何解决?
ayqy贾杰
2019/06/12
1.3K0
函数curry化(Haskell Curry)
当一个函数fn有多个参数时,可以先传入一部分参数,生成一个中继函数nextFn,然后在nextFn当中再传入剩下的参数。(一步curry化)
elson
2020/01/02
1.3K0
本地使用 Haskell CodeWorld Locally
下载好之后注意看下载的版本,因为在之后的 .cabal 文件中要指定 codeworld-api 的版本
莫听穿林
2022/05/20
5020
本地使用 Haskell CodeWorld Locally
Haskell
这门语言在数学模型上有着很深的优势,虽然它有很多特性,让人很难接受,随着学习的深入,你才会发现这会多么有趣。
icepy
2019/06/24
8900
Haskell doctest
一定要注意格式 第一行很重要,-- |这行没有就不是一个 test。 可以对比 >>> 的个数 和 terminal里的 Examples 个数确认是否自己的所有 test 都测试了
莫听穿林
2022/05/20
3210
Haskell doctest
如何使用几何画板画函数图像,如极坐标函数图像?
1、点击[绘图] 2、点击[网格样式] 3、点击[极坐标网格] 4、点击[绘图] 5、点击[绘制新函数] 6、点击[3] 7、点击[函数] 8、点击[cos] 9、点击[θ] 10、点击[确定] 11、点击[是]
裴来凡
2022/05/28
1.3K0
如何使用几何画板画函数图像,如极坐标函数图像?
热爱函数式的你,句句纯正的 Haskell【函数篇】
Haskell 值与函数是统一的,函数只是需要其他参数输入的值。如果定义的是函数,那么这个函数的行为在运行过程中也是不会改变的,对于某一个特定的输入返回的结果总是确定的,这样的函数为纯函数。
掘金安东尼
2022/09/19
3510
绑定事件中 如可控制函数的执行次数
var flag = true; function onlyOne() { if(flag) { "这里是要执行的代码"; } flag = false//该方法是控制函数仅执行一次 因为flag是全局变量 onlyOne()函数执行一次后flag就变成false了 函数就执行不了了
大当家
2018/06/28
2.3K0
如何在 Bash 中编写函数
在编程时,实际上是在定义要由计算机执行的 过程(procedure)或 例程(routine)。一个简单的类比是将计算机编程与烤面包进行比较:你一次列出了要组建工作环境的配料,然后列出了烤面包所必须采取的步骤。在编程和烘烤中,必须以不同的间隔重复执行某些步骤。例如,在烤面包中,这可能是酵母培养的过程:
用户1880875
2021/09/16
1.8K0
Haskell Platform安装
不懂了,明天写
云深无际
2020/11/03
1.1K0
Haskell Platform安装
haskell 求助
findBonding :: Eq a => (a -> a -> Bool) -> [a] -> Maybe [(a,a)]
用户6797589
2019/12/02
5550
如何在 Bash 中编写函数
在编程时,实际上是在定义要由计算机执行的 过程(procedure)或 例程(routine)。一个简单的类比是将计算机编程与烤面包进行比较:你一次列出了要组建工作环境的配料,然后列出了烤面包所必须采取的步骤。在编程和烘烤中,必须以不同的间隔重复执行某些步骤。例如,在烤面包中,这可能是酵母培养的过程:
用户1880875
2021/09/15
1.8K0
如何在 TypeScript 中使用函数
英文 | https://www.digitalocean.com/community/tutorials/how-to-use-functions-in-typescript
winty
2022/04/08
15K0
如何在 TypeScript 中使用函数
热爱函数式的你,句句纯正的 Haskell【库函数篇】
本篇是笔记篇,介绍 Haskell 的强大的库函数,也可感受下与我们平常的 js 操作异同之处:
掘金安东尼
2022/09/19
4480
如何在Linux机器中测试存储/磁盘I/O性能?
在Linux环境中,了解存储/磁盘I/O性能对于评估系统性能和优化存储子系统非常重要。通过测试存储/磁盘I/O性能,我们可以确定磁盘的读写速度、延迟和吞吐量等指标。本文将介绍几种常用的方法来测试Linux机器中的存储/磁盘I/O性能。
网络技术联盟站
2023/05/28
5.6K0
如何在Linux机器中测试存储/磁盘I/O性能?
如何在spark里面使用窗口函数
在大数据分析中,窗口函数最常见的应用场景就是对数据进行分组后,求组内数据topN的需求,如果没有窗口函数,实现这样一个需求还是比较复杂的,不过现在大多数标准SQL中都支持这样的功能,今天我们就来学习下如何在spark sql使用窗口函数来完成一个分组求TopN的需求。
我是攻城师
2019/06/25
4.2K0
如何在spark里面使用窗口函数
如何在JavaScript中使用高阶函数
原文链接:https://www.sitepoint.com/higher-order-functions-javascript/[1]
chuckQu
2022/09/20
1.5K0
python中的I/O,以及强制类型转换函数
现在我们来自己输入一些东西,也就是让计算机知道从用户那里取得信息的命令输入“input”
Gorit
2021/12/09
7500
python中的I/O,以及强制类型转换函数
点击加载更多

相似问题

Haskell -如何在IO函数中使用纯函数?

33

Haskell远程文件IO库(如kio)?

11

定义haskell函数[IO a] -> IO[a]

43

如何在Haskell中调用Ptr GLubyte -> IO()类型的函数

21

如何在Haskell中处理递归函数中的副IO操作?

116
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文