deniok: (ухмыляюсь)
deniok ([personal profile] deniok) wrote2016-04-07 12:00 pm

id да не id

Приведите пример таких объявлений типа данных с конструктором данных T и сигнатуры функции f, что реализация
f (T x) = T x
проходила бы проверку типов, a
f x = x
нет.

[identity profile] john kozlov (from livejournal.com) 2016-04-07 09:57 am (UTC)(link)
В голову приходит только дебильное:

data T = T (IO ())
instance Eq T where { _ == _ = True }

f = id

Теперь:

id $ putStrLn "abc" == putStrLn "abc" -- не компилируется
id $ T (putStrLn "abc") == T (putStrLn "abc") -- компилируется

[identity profile] john kozlov (from livejournal.com) 2016-04-07 02:10 pm (UTC)(link)
Короче, я неправильно понял задание. Я прочитал f x = x как f x == x и задача кардинально изменила свой смысл. Поэтому и написал instance Eq