@haskellru

Страница 402 из 1551
Alex
14.09.2017
13:56:18
есть какой нибудь флаг?

Arseniy
14.09.2017
13:58:47
Да норм стикерпак получился, мемный

Donat
14.09.2017
14:00:19
https://wiki.haskell.org/Haskell_logos/New_logo_ideas
Хаха, вот это вин https://wiki.haskell.org/wikiupload/5/5c/Hazard_lambda_cracked_2.png

Google
Bohdan
14.09.2017
14:00:46
Donat
14.09.2017
14:01:09
Чтооо

Aleksey
14.09.2017
14:01:24
Donat
14.09.2017
14:01:43
Там есть и довольно крутые :)
Безусловно, мне многие понравились

Aleksey
14.09.2017
14:02:54
http://www.willamette.edu/~fruehr/logos/intro.html тут ещё есть немного старых лого от Hugs того же и haskell.org





Можно на футболку напечатать :)

http://www.willamette.edu/~fruehr/logos/PNGs/PureFun.png

ParkeT
14.09.2017
14:07:51
https://pastebin.com/cT9ihi8v

Sherzod
14.09.2017
14:13:32
Я исправлюсь, обещяю :(

Google
Alexander
14.09.2017
14:36:52
ещё гифками общаться начните с haskell тематикой

если у нас newtype вокруг Int то для него мы через GeneralizedNewtypeDeriving можем все инстансы сделать

это можем

Sherzod
14.09.2017
14:38:27
Теократы, подскажите юному падавану ютуб тутор по хаскелю )

Vasiliy
14.09.2017
14:38:51
> значит поидее можно вывести тайпкласс Foo для newtype для этого есть GeneralizedNewtypeDeriving

и вывести инстанс Foo для любого Num можно через DefaultSignatures, как это уже показывали

Alexandr
14.09.2017
14:40:04
ничего не понял, то все не так
Ну тип, у нас есть class Foo a where bar :: a -> Bool Мы можем создать инстанс для Int instance Foo Int where ... Но наприме мы хотим инстанс не для Int, а для Num, мы его сделали и для Int работает функция bar, потом делаем newtype Int' = Int' Int deriving (Foo) и это перестает работать

используя GeneralizedNewtypeDeriving конечно

Alexander
14.09.2017
14:40:36
не понимаю, что такое instance для Num

Sherzod
14.09.2017
14:41:44
Видеолекция Хаскель - Монады 5 часов. Это нормально?

Alexander
14.09.2017
14:41:54
если мы сделали instance для Num, то очевидно, что надо писать: newtype Int' = Int' Int deriving (Num)

Dmitry
14.09.2017
14:42:04
курс на степике нормально

только это не ютуб

Alexandr
14.09.2017
14:42:14
я новичек, точно могу ошибаться в названиях:) Я имел ввиду, что мы создаем instance для Int instance Foo Int where bar ... Но почему бы того же делать не для типов, а для тайпклассов

Alexander
14.09.2017
14:42:42
тут одновременно 4 вопроса и вечно в них путаница

Alexander
14.09.2017
14:43:14
можно: a. реализовать для всех типов с констрейном Num, но для других нельзя: instance Num a => Foo a

можно сделать дефолтную реализацию для Num: class Foo a where default bar :: (Num a, Ord a) => ...

тогда если у типа есть Num, то достаточно будет написать: instance Foo A

делается инстанс класса для типа

Google
Alexander
14.09.2017
14:45:10
конечно никто наверное не запрещает сделать: class Foo (a :: * -> Constraint) where

Alexandr
14.09.2017
14:45:21
Alexander
14.09.2017
14:45:23
и реализовывать классы для классов =)

/shrug

я не вижу ни кода ни ошибки компиляции, я ничего сказать не могу

Vasiliy
14.09.2017
14:47:01
у меня кстати это не сработало
как именно не сработало?

Alexander
14.09.2017
14:47:17
{-# LANGUAGE DefaultSignatures #-} class Foo a where foo :: a -> Bool default foo :: (Ord a, Num a) => a -> Bool foo x = x > 5 instance Foo Int

эта часть точно работает

что там дальше происходило я не знаю

Alexandr
14.09.2017
14:50:08
Да, сори, сработало, видимо как-то криво сам написал. Просто идея была в том, чтобы не писать интанс для каждого типа, который принадлежит какому-то тайпклассу

Alexander
14.09.2017
14:53:19
не надо так

у если захочется написать свой инстанс для класса, у которого есть такой констрейнт, то у компилятора не будет причин предпочитать тот или иной

Alexander
14.09.2017
15:00:34
ты можешь написать: instance (Ord a, Num a) => Foo a where

Alexander
14.09.2017
15:00:56
так?

Alexandr
14.09.2017
15:01:01
{-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE UndecidableInstances #-} class Foo a where foo :: a -> Bool class Bar a where bar :: a -> Bool newtype Int' = Int' Int deriving (Eq, Ord, Num) instance (Ord a, Num a) => Foo a where foo n = n > 5 instance (Ord a, Num a) => Bar a where bar n = n > 10

Alexander
14.09.2017
15:01:22
вот, это инстанс для всех типов а

т.е. любой вообще любой тип под него попадает

совсем любой

Google
Alexander
14.09.2017
15:01:52
после того как инстанс выбран компилятор смотрет в констрейнты

и или падает или выбирает

через overloading можно сначала делать конкретные потом остальные, но это так себе путь

Vasiliy
14.09.2017
15:02:40
overloading - имеется в виду overlaps и overlapping ?

Alexander
14.09.2017
15:02:49
да

отвлекаюсь

Alexandr
14.09.2017
15:04:49
просто не совсем понимаю чем это плохо

оно же так и работает

Alexander
14.09.2017
15:06:46
> если захочется написать свой инстанс для класса, у которого есть такой констрейнт, то у компилятора не будет причин предпочитать тот или иной

Alexandr
14.09.2017
15:08:34
ну я понял, короче это будет работать и будет вроде удобно, пока не перестанет :D

Vasiliy
14.09.2017
15:09:16
оно перестанет работать при появлении любого другого инстанса Foo

и предложит пошаманить прагмами OVERLAPS и OVERLAPPABLE

я не знаю, какие конкретно проблемы оно за собой тянет, но знающие люди говорят, что лучше с этой фигнёй не связываться

Alexandr
14.09.2017
15:11:40
понял, спасибо за разъяснение:)

Alexander
14.09.2017
15:12:24
ну OVERLAPS и OVERLAPPABLE сделало жизнь гораздо лучше

чем было до

но все равно есть шансы оказаться одновременно с двумя разными словарями

Alexandr
14.09.2017
15:13:26
Я кстати посмотрел доку ghc, там поиска нет, как можно найти раздел с прагмами?

или мб есть дока с нормальным поиском?

Google
Alexander
14.09.2017
15:21:36
@basov_ae https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/lang.html

аккуратный overlappable/overlapping норм

Index
14.09.2017
15:58:09
Но в случае конечного множества опций лучше closed type family и вспомогательный класс

Потому что тогда аккуратничать не придется

Vasiliy
14.09.2017
16:02:07
> лучше closed type family и вспомогательный класс а есть конкретный пример?

Index
14.09.2017
16:25:27
См. RElem с вспомогательным параметром в vinyl

Где-то был еще классный gist от IcelandJack на этот счет

Vasiliy
14.09.2017
17:44:37
спасибо, погуглю

Alexander
14.09.2017
20:46:03
а можно по олеговски MPTC+FD

но суть там будет примерно та же

Alexandr
14.09.2017
21:35:13
Ребят, как можно написать map используя fold? Когда есть data Tree a = Leaf | Node (Tree a) a (Tree a) fold :: (a -> b -> b) -> b -> Tree a -> b

с фолдом с 3-мя аргументами все понятно, а вот что с двумя делать воообще понять не могу

map :: (a -> b) -> Tree a -> Tree b

Vladislav
14.09.2017
21:38:48
а fold в in-order обходит дерево, или как?

и нужно ли сохранять структуру оригинального дерева?

Alexandr
14.09.2017
21:42:44
в этом фолде постордер выходит, как сделать инордер не понял для функции с двумя параметрами. Сохранить порядок было бы логично, но как это сделать как раз и не понимаю

Alexandr
14.09.2017
21:46:39
Да, я тоже думал об этом, но подумал, что может я чего-то не вижу

В книге задание такое

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