我是Haskell的新手。我正在学习单子。
data Container a = Container a deriving Show
x = Container 1 :: Container Int
plusOne :: Container Int -> Container Int
plusOne (Container x) = Container (x+1)
有什么办法可以解除plusOne
申请Container (IO Int)
吗?
或者我应该定义一个新函数,例如:
plusOne' :: Container (IO Int) -> Container (IO Int)
plusOne' (Container x) = Container (liftM (+1) x)
谢谢大家:-) 然后有什么办法可以避免重新定义 plusOne 吗?
因为当我构建程序时,首先我用非单子类型的容器(正常值,如:Container Int ..etc)构建程序,然后用指定值(Container 10..)测试函数。
之后,我尝试将这些程序应用于随机或生成的值。这是我用其他语言(例如 Lisp、Python ..)编程的基本方法
因此,当我想尝试将这些函数应用于 monadic-value 容器时,我不想重新定义函数。
这种方法不适用于 Haskell 编程?我应该改变我的思维模型吗?还是我对 Haskell 有误解?