LINUX.ORG.RU

История изменений

Исправление 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) ()