История изменений
Исправление quasimoto, (текущая версия) :
Но зачем, если можно сделать это неявно и избавить программиста от ручной работы?
Какого программиста в случае какого языка от какой работы?
Но в чем проблема им неявно вычиляться в терм ИО?
Ну пусть вычисляются — будет частичная семантика в которой все функции «чистые» и вызовы вычисляются либо в чистые значения обычных типов, либо в спецификации IO, а если продолжить эту семантику до конца, до непосредственных значений, то можно будет увидеть, чем sin отличается от time.
import Control.Monad
import Data.Time.Clock
isPureM f test = liftM2 (==) (f test) (f test)
main = do
print =<< isPureM (return . sin) 1.0
print =<< isPureM (const getCurrentTime) ()
Исходная версия quasimoto, :
Но зачем, если можно сделать это неявно и избавить программиста от ручной работы?
Какого программиста в случае какого языка от какой работы?
Но в чем проблема им неявно вычиляться в терм ИО?
Ну пусть вычисляются — будет частичная семантика в которой все функции «чистые» и вызовы вычисляются либо в чистые значения обычных типов, либо в спецификации IO, а если продолжить эту семантику до конца, до непосредственных значений, то можно будет увидеть, чем sin отличается от time.
import Control.Monad
import Data.Time.Clock
isPureM f test = liftM2 (==) (f test) (f test)
main = do
print =<< isPureM (return . odd) 1
print =<< isPureM (const getCurrentTime) ()