@haskellru

Страница 338 из 1551
Alexander
28.07.2017
19:29:04
..как хорошо что это интернет и здесь не понять когда люди серьёзны, а когда троллят

Yurii
28.07.2017
19:32:05
начинать обучение с теории категорий
ну, для начала надо учителям объяснить (а при учёте, что в пед.институты идут тее, кто никуда более не поступил....) + мировосприятие детей в 5,6,7..11 лет разное (психология, педагогика, простигосподи)

Андрей
28.07.2017
19:37:58
По сабжу рекомендю статьи академика Арнольда и его полемику с Бурбакистами. Для затравки - байка от него, якобы реальная. Во французской начальной школе одного первоклассника спросили - сколько будет 3+2. Он ответил - не знаю, но будет столько же, сколько 2+3, потому что сложение коммутативно (С)

Google
Alexander
28.07.2017
20:10:36
Добрый вечер, хотел спросить.

data T a = A a | B a deriving Eq

Class TT (T a) ...

Vasiliy
28.07.2017
20:11:20
я полностью согласен, что конкретные примеры нужны, но ведь для многих вещей есть вполне конкретные примеры

например, моноид, можно на примере строк объяснить

Alexander
28.07.2017
20:12:05
Instance TT (T a) where eq x y = x==y

Denis
28.07.2017
20:12:09
а свободный на примере списка

Vasiliy
28.07.2017
20:12:14
или, скажем, жд состав - прицепили вагоны справа, прицепили слева

Alexander
28.07.2017
20:12:44
Вопрос: зачем он требует ограничить a в инстанс по Eq ?

Ведь у T есть deriving Eq и он нормально сравнивается

Vasiliy
28.07.2017
20:13:44
обратный элемент: добавили в стакан с водой кипятка, вода стала горячее, налили столько же холодной воды, температура такая же, как прежде

Alexander
28.07.2017
20:19:04
T станет Eq только если a тоже Eq
Если я пишу deriving Eq - то оно станет Eq, если может.

Google
Alexander
28.07.2017
20:20:09
Но кажется я слона пропустил , в классе я описал через ::a->a->Bool, а надо было ::(T a)->(T a)->Bool

Андрей
28.07.2017
20:20:56
Имхо хорошо бы определиться - или дерайвинг, или инстанс

Vasiliy
28.07.2017
20:20:57
> data T a = A a | B a deriving Eq > data R = R > A R == A R <interactive>:24:1: error: • No instance for (Eq R) arising from a use of ‘==’

Alexander
28.07.2017
20:21:58
Дерайвинг для Eq, а инстанс для eq - функции. Но по-любому спасибо, сейчас проверю.

Андрей
28.07.2017
20:23:52
твоя eq = (==) или совсем по-другому можешь ее определить - хозяим барин. Хоть eq _ _ = True

Vasiliy
28.07.2017
20:25:54
Если я пишу deriving Eq - то оно станет Eq, если может.
вот именно, что если может, а может оно только если a тоже Eq

data T a = T a deriving Eq = instance Eq a => Eq (T a) where ...

Denis
28.07.2017
20:36:49
ахаа

Alexander
28.07.2017
20:36:50
Не, извиняюсь, не заработало и я не понял.

Denis
28.07.2017
20:37:04
время веселых снимков экрана)

Евгений
28.07.2017
20:39:11
Сделай в тайпклассе TT тип eq :: a -> a -> Bool

Alexander
28.07.2017
20:39:23


Евгений
28.07.2017
20:39:27
У тебя нету телеграма на компе?

Alexander
28.07.2017
20:39:56
К сожалению нет, на рабочем.

Но на последней картинке видно норм надеюсь :) сорян конечно.

Artyom
28.07.2017
20:40:41
К сожалению нет, на рабочем.
(web.telegram.org можно открыть, если что)

Alexander
28.07.2017
20:40:49
С работы нельзя.

Artyom
28.07.2017
20:40:57
а, понятно

Alexander
28.07.2017
20:41:31
Смотрите, eq тип описан

И он T a, у T есть Eq и он норм работает если просто == сравнить.

Google
Alexander
28.07.2017
20:42:23
Зачем он требует ещё ограничить внутренний параметр T ?

Евгений
28.07.2017
20:42:32
А в инстансе eq (A x) (A y) = x == y eq (A _) (B _) = False ...

Alexander
28.07.2017
20:42:59
Не хочу

Евгений
28.07.2017
20:43:56
Честно говоря мне не оч понятно чего ты хочешь :)

Denis
28.07.2017
20:44:33
С работы нельзя.
а на хаскелл писать можно?)

Alexander
28.07.2017
20:44:41
Ок, описал как вы написали, тоже самое: с Eq a => работает, а без - нет

Честно говоря мне не оч понятно чего ты хочешь :)
Хочу понять. Почему он требует ограничить параметр типа, который derived Eq

Artyom
28.07.2017
20:45:13
> у T есть Eq попробуй сделай A id == A not в репле

Андрей
28.07.2017
20:45:35
Страннота какая-то в чате (С) Александр Вершилов

Евгений
28.07.2017
20:45:38
А как ты хочешь чтобы без Eq a сравнивать их?

Внезапно есть типы которые нельзя сравнить

Alexander
28.07.2017
20:47:43
Ну смотрите, может тут и загвоздка. r = (A 1) == (A 2) работает же.

Только за счёт deriving

Artyom
28.07.2017
20:48:18
работает, потому что и у T, и у Integer есть инстанс Eq

притом инстанс Eq (T a) – задерайвленный! – требует инстанс Eq a

что довольно логично

Андрей
28.07.2017
20:49:44
мне кажется, я понял затруднение ТС :) твой тип - однопараметрический, и нет НИКАКИХ ограничений на то, что сувать туда. И никакой дерайвинг еку или орд не ограничивает тебя - ты можешь засунуть все равно то что не екушится и не ордится. Вот для этого и ограничения в инстансах даже при дерайвинге.

Андрей
28.07.2017
20:50:52
То есть в одном месте кода ты можешь засунуть туда числа - и сравнивать свой тип. А в другом месте того же кода - засунуть в тот же тип функции - и ничего не поломается, даже будет работать (инстансы функтора и т.п.)

но екушиться уже не будет

Google
Alexander
28.07.2017
20:51:26
Те он смотрит на конечный тип и для T Integer решает что == это ок из deriving

Но в instance он не смотрит на то, что потом это тоже T Integer?

Андрей
28.07.2017
20:52:27
Ты можешь засунуть T (T (T Int)) и это волшебнорекурсивно отъекушится

Alexander
28.07.2017
20:53:47
Но только для == , а не для моего класса

Такие и были подозрения, но какой-то осадочек пока не понятный :)

Андрей
28.07.2017
20:55:21
потому что судя по словам у тебя каша в голове и терминах

Alexander
28.07.2017
20:55:49
На deriving надейся, а сам не плошай. Пойду попробую понять когда deriving Eq не будет срабатывать.

Хотя в целом в данной ситуации вроде все понятно, но просто не понятно как оно работает.

Я думал deriving гарантирует Eq

Denis
28.07.2017
20:57:38
ну ты вроде можешь еще StandaloneDeriving

Андрей
28.07.2017
20:58:03
читай выше про НИКАКИХ )

Denis
28.07.2017
20:58:17
deriving instance Eq a => Eq (T a)

Alexander
28.07.2017
20:59:14
В том плане что сам написать инстанс Eq ? Это ясно вроде.

Понятно что не понятно как срабатывает deriving, вроде без него картина относительно светлая.

Андрей
28.07.2017
21:03:41
можешь считать что дерайвинг работает как макрос, пишущий лобовые инстансы как если бы ты писал их сам

Alexander
28.07.2017
21:03:54
deriving Eq, это значит делается инстанс Eq a

И тут, получается, тоже не хватает ограничителя.

Vasiliy
28.07.2017
21:04:48
делается, если есть такая возможность

Андрей
28.07.2017
21:05:18
не еку а а еку твоего типа

Google
Alexander
28.07.2017
21:05:33
Андрей
28.07.2017
21:05:46
а еку а не делается а предполагается

Vasiliy
28.07.2017
21:06:01
для любого a сделать Eq (T a) он не сможет

мог бы, конечно - (==) _ _ = False, например, но здравый смысл подсказывает так не делать

Artyom
28.07.2017
21:07:47
Понятно что не понятно как срабатывает deriving, вроде без него картина относительно светлая.
можешь взять да посмотреть, какие инстансы получаются при deriving Eq я взял твой код и скомпилил его с флагом -ddump-deriv, вот что получилось [yom@shiny tmp]$ ghc -ddump-deriv eq.hs [1 of 1] Compiling Main ( eq.hs, eq.o ) ==================== Derived instances ==================== Derived instances: instance GHC.Classes.Eq a_a1u2 => GHC.Classes.Eq (Main.T a_a1u2) where (GHC.Classes.==) (Main.A a1_a1u3) (Main.A b1_a1u4) = ((a1_a1u3 GHC.Classes.== b1_a1u4)) (GHC.Classes.==) (Main.B a1_a1u5) (Main.B b1_a1u6) = ((a1_a1u5 GHC.Classes.== b1_a1u6)) (GHC.Classes.==) _ _ = GHC.Types.False (GHC.Classes./=) a_a1u7 b_a1u8 = GHC.Classes.not ((GHC.Classes.==) a_a1u7 b_a1u8) а если убрать мусор, то вот так выглядит instance Eq a => Eq (T a) where (==) (A a) (A b) = (a == b) (==) (B a) (B b) = (a == b) (==) _ _ = False (/=) a b = not ((==) a b) заметь Eq a слева от =>

illiatshurotshka❄️
28.07.2017
21:08:43
я чет запутался с функторами в теории категорий

они же получается отличаются от того что есть в хаскеле

Denis
28.07.2017
21:09:25
я чет запутался с функторами в теории категорий
функторы это морфизмы между категориями

Denis
28.07.2017
21:10:24
ну это понятно

illiatshurotshka❄️
28.07.2017
21:11:29
Functor f => (a -> b) -> f a -> f b

а и б это категории

что тогда f?

Андрей
28.07.2017
21:13:41
с законом
в Хаскеле - с законом, в ТК - с двумя ?

Vasiliy
28.07.2017
21:13:55
гм.. а какой второй?

что тогда f?
отображение между типами

f :: * -> *

Denis
28.07.2017
21:15:42
в Хаскеле - с законом, в ТК - с двумя ?
ну из-за паратримитичности не надо 2 проверять)

Кметт когда-то написал https://www.schoolofhaskell.com/user/edwardk/snippets/fmap

Андрей
28.07.2017
21:16:45
гм.. а какой второй?
фигасе, приплыли. композиция мапов равна мапу композиции. Да, на эту статью Кметта я и намекаю )

Страница 338 из 1551