IO作为副作用
问题描述:
我能写一个函数执行IO
作为它的一个副作用吗?例如:IO作为副作用
f :: Int -> Int
f n = putStr "text" >> return n*2
很显然,我没有任何的方式来写,没有它被完全不正确的代码,但应该至少说明大致就是我希望做。
答
你的功能几乎是正确的。如果它有副作用,那么它需要类型IO
。此外,功能应用程序绑定比中缀更紧密。将这些结果修正为:
f :: Int -> IO Int
f n = putStr "text" >> return (n*2)
你的意思是没有结果类型是'IO Int'? – sepp2k 2013-02-23 17:38:40
其实这是一个非常好的功能 - 它只是类型'Int - > IO Int',这是一件好事。你的问题是什么? – delnan 2013-02-23 17:41:41
禁止你想要的是'IO' monad的*特性*。你可以用'unsafePerformIO'作弊,但它不会做你想要的。将签名更改为'Int - > IO Int',你会没事的。 – gspr 2013-02-23 17:43:34