相关疑难解决方法(0)

Haskell:实际的IO monad实现,用不同的语言?

IO monad实际上是如何实现的?在意义上,该main函数的实际实现是什么?

我如何从另一种语言调用haskell函数(IO),在这种情况下,我是否需要维护IO自己?

是否main将IO操作(Lazily)作为引用拉出然后调用它们?或者它是解释工作,当它发现它可以调用它们的方式的行动?或者别的什么?

有不同语言的IO monad实现是否有助于深入理解主要功能中发生的事情?

编辑:

hGetContents让我很困惑,让我不确定IO是如何真正实现的.

好吧,假设我有一个非常简单的纯Haskell解释器,不幸的是没有IO支持,并且为了好奇,我想向它添加这个IO动作(unsafeIO技巧也).很难从GHC,Hugs或其他人那里得到它.

io monads interpreter haskell

15
推荐指数
5
解决办法
3938
查看次数

Haskell中的IO实现

我知道,我们不能独立实现IO monad,但我不知道为什么.此代码试图使用函数式语言实现命令式范例.你能解释一下这个例子和真正的IO之间的区别吗?看起来函数main实现了正确的动作顺序并且仍然是懒惰的.

import System.IO.Unsafe   

data Io a = Io a 

runIO :: Io a -> a
runIO (Io a) = a

instance Monad Io where  
 return x = Io x
 Io a >>= f = f a

-- internal side effect function 
output :: Show a => a -> Io () 
output s  = return $! unsafePerformIO $ print s

----------------------------------------------------------------

mainIO :: Io ()                             
mainIO = do output "A"  
            b <- return "B"
            output b     
            output b 
            x <- …
Run Code Online (Sandbox Code Playgroud)

io haskell semantics

2
推荐指数
1
解决办法
465
查看次数

标签 统计

haskell ×2

io ×2

interpreter ×1

monads ×1

semantics ×1