История изменений
Исправление qnikst, (текущая версия) :
если же ты про:
import Control.Monad.IO.Class
import System.IO.Unsafe
instance MonadIO Maybe where
liftIO f = let r = unsafePerformIO f
in r `seq` Just r
test :: a -> Maybe a
test a = do
liftIO (putStrLn "hacked")
return a
то приходи, тогда, когда ты перепишешь это без UnsafePerformIO, а для защиты от подобных хаков есть SafeHaskell.
Заметь, приведенный код очень сильно сужает объект рассмотрения и проблематики. Правда данная проблема относится к трансформерам чуть менее, чем никак. А к quickcheck ещё меньше.
Исправление qnikst, :
если же ты про:
import Control.Monad.Identity
import Control.Monad.IO.Class
import Control.Monad.Trans.Maybe
import System.IO.Unsafe
instance MonadIO Maybe where
liftIO f = let r = unsafePerformIO f
in r `seq` Just r
test :: a -> Maybe a
test a = do
liftIO (putStrLn "hacked")
return a
то приходи, тогда, когда ты перепишешь это без UnsafePerformIO, а для защиты от подобных хаков есть SafeHaskell.
Заметь, приведенный код очень сильно сужает объект рассмотрения и проблематики. Правда данная проблема относится к трансформерам чуть менее, чем никак. А к quickcheck ещё меньше.
Исправление qnikst, :
если же ты про:
import Control.Monad.Identity
import Control.Monad.IO.Class
import Control.Monad.Trans.Maybe
import System.IO.Unsafe
instance MonadIO Maybe where
liftIO f = let r = unsafePerformIO f
in r `seq` Just r
test :: a -> Maybe a
test a = do
liftIO (putStrLn "hacked")
return a
то приходи, тогда, когда ты перепишешь это без UnsafePerformIO, а для защиты от подобных хаков есть SafeHaskell.
Заметь, приведенный код очень сильно сужает объект рассмотрения и проблематики. Правда данная проблема относится к трансформерам чуть менее, чем никак.
Исходная версия qnikst, :
если же ты про:
import Control.Monad.Identity
import Control.Monad.IO.Class
import Control.Monad.Trans.Maybe
import System.IO.Unsafe
instance MonadIO Maybe where
liftIO f = let r = unsafePerformIO f
in r `seq` Just r
test :: a -> Maybe a
test a = do
liftIO (putStrLn "hacked")
return a
то приходи, тогда, когда ты перепишешь это без UnsafePerformIO, а для защиты от подобных хаков есть SafeHaskell.