haskell - 如何在haskell中执行 "break"IO操作

标签 haskell

我想在 haskell 中拥有“return”(命令式语言)函数。

例如

main = do
  let a = 10
  print a
--  return this function
  print $ a + 1

我怎样才能实现这个目标?

最佳答案

您可以使用 Exceptions 在某种程度上模拟这一点,

{-# LANGUAGE DeriveDataTypeable #-}
import Control.Exception
import Data.Typeable

data MyException = MyException deriving (Show, Typeable)
instance Exception MyException

main = handle (\ MyException -> return ()) $ do
  let a = 10 :: Int
  print a
  throwIO MyException
  print $ a + 1         -- never gets executed

您还可以使用 ContT or ErrorT monad transformers 来完成此操作,尽管它们可能有点笨拙。

关于haskell - 如何在haskell中执行 "break"IO操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25151406/

相关文章:

Haskell - 模式匹配和递归

html - 使用 Lucid 进行简单示例

haskell - 将数字字符串转换为整数

haskell - 访问状态 Monad haskell 中的计数

c# - C# 是否支持函数组合?

haskell - 为预先存在的类型自动生成 `PersistEntity`

haskell - 在 Haskell 上,表示纸牌游戏的纸牌效果的语言方式是什么?

haskell - 如何合并 Haskell 中的所有相交(Set a)?

haskell - Haskell 中的高阶 OR

haskell - 从 Haskell 中的两个列表复制文件