gpt4 book ai didi

haskell - OO Haskell 中 return 和 returnIO 的区别

转载 作者:行者123 更新时间:2023-12-02 21:19:20 25 4
gpt4 key购买 nike

returnIO在OOHaskell中用于返回对象作为方法的记录。但即使使用 return 而不是 returnIO ,输出或对象行为也没有区别。 OOHaskell 代码是:

{-# LANGUAGE EmptyDataDecls, DeriveDataTypeable, TemplateHaskell #-}
{-# OPTIONS_GHC -fcontext-stack=100 #-}

module Rectangle where

import OOHaskell

$(label "getLength")
$(label "getWidth")
$(label "incr")
$(label "lengthenBy")
$(label "setLength")
$(label "setWidth")
$(label "show'")

rectangle length width self
= do
lengthRef <- newIORef length :: IO (IORef Int)
widthRef <- newIORef width :: IO (IORef Int)
return $
getLength .=. readIORef lengthRef
.*. getWidth .=. readIORef widthRef
.*. setLength .=. writeIORef lengthRef
.*. setWidth .=. writeIORef widthRef
.*. lengthenBy .=. (\dl ->
do
length <- self # getLength
(self # setLength) (length + dl))
.*. incr .=. (self # lengthenBy) (1)
.*. show' .=. printLn ("Length : "<< self # getLength<<" Width : "<< self # getWidth)
.*. emptyRecord

谁能解释一下为什么会发生这种情况?是什么使得对象在这两种情况下表现相同?

最佳答案

returnIO return,但专门针对 IO 类型。

即:

return   :: Monad m => a ->  m a
returnIO :: a -> IO a

参见 OOHaskell.hs 的第 75-76 行:

returnIO :: a -> IO a
returnIO = return

关于haskell - OO Haskell 中 return 和 returnIO 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9128002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com