id да не id
Apr. 7th, 2016 12:00 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Приведите пример таких объявлений типа данных с конструктором данных T и сигнатуры функции f, что реализация
f (T x) = T xпроходила бы проверку типов, a
f x = xнет.
no subject
Date: 2016-04-07 09:57 am (UTC)data T = T (IO ())
instance Eq T where { _ == _ = True }
f = id
Теперь:
id $ putStrLn "abc" == putStrLn "abc" -- не компилируется
id $ T (putStrLn "abc") == T (putStrLn "abc") -- компилируется
no subject
Date: 2016-04-07 10:44 am (UTC)data T = T Int Int
. Или имеется в виду что-то другое?no subject
Date: 2016-04-07 10:45 am (UTC)data T = T
.no subject
Date: 2016-04-07 10:52 am (UTC)no subject
Date: 2016-04-07 10:58 am (UTC)(полагаю, вы имели в виду "аргумент", а не "конструктор").
no subject
Date: 2016-04-07 11:02 am (UTC)no subject
Date: 2016-04-07 11:02 am (UTC)no subject
Date: 2016-04-07 11:04 am (UTC)no subject
Date: 2016-04-07 11:07 am (UTC)no subject
Date: 2016-04-07 11:22 am (UTC)no subject
Date: 2016-04-07 12:36 pm (UTC)no subject
Date: 2016-04-07 02:10 pm (UTC)f x = x
какf x == x
и задача кардинально изменила свой смысл. Поэтому и написалinstance Eq
no subject
Date: 2016-04-09 07:10 am (UTC)map f (x:xs) = f x: map f xs
map f xs = xs -- нельзя, т.к. xs не того типа
А в чистом виде - функтор Const.
data Const a b = Const a
type T = Const A
no subject
Date: 2016-04-09 07:59 am (UTC)no subject
Date: 2016-04-09 08:36 am (UTC)Да, Either подойдет, но не пройдет проверку один из кейсов, и искомый вид имеет не вся функция, а лишь один кейс.