
Алексей Ayaye :)
14.07.2018
22:33:20

Dmitry
14.07.2018
23:24:30
Действительно, не умеет
https://en.wikipedia.org/wiki/Comparison_of_parser_generators
Там какое-то GDK есть

Google

Dmitry
14.07.2018
23:25:05
Output languages: C, Lex, Haskell, HTML, Java, Object Pascal, Yacc

Алексей Ayaye :)
14.07.2018
23:50:21
я нашел только такую штуку, но похоже, это наоборот, чтобв из сгенерированного парсера на С вызывать код на хаскеле. Вообще не понимаю, зачем :)
http://hackage.haskell.org/package/antlrc

Dmitry
15.07.2018
00:09:17
В узлах обработку писать. Мне б такое лет пять назад пригодилось, тогда на Java обработку делал

Maxim
15.07.2018
07:59:34
@cblp_su вы тоже пишете на qtah? :)
Копаюсь в их репозитории и вдруг вижу знакомое имя в коммитах

Yuriy
15.07.2018
08:00:27
но ничего лучше всё равно не могу посоветовать, при условии опыта в Qt

Maxim
15.07.2018
08:07:38
Ну мы сейчас на нем ведём проект, я вот один пр туда уже протолкнул

Yuriy
15.07.2018
08:13:32
там много тупого кода приходится дописывать в библиотеку, очень долго компилируется
и ещё указатели нулябельные
жди NPE на каждом шагу
впрочем, не более, чем в C++

Ilya
15.07.2018
08:26:42
https://downloads.haskell.org/~ghc/master/users-guide/glasgow_exts.html#extension-GeneralizedNewtypeDeriving
ого вот это фича в 8.6.1

Google

Yuriy
15.07.2018
08:38:19
Глазго же

Index
15.07.2018
10:16:18
GND вроде давно уже, в 8.6 добавили DerivingVia

Yuriy
15.07.2018
10:17:17

Index
15.07.2018
10:18:41
Все равно ссылка не на то, z это American spelling

Yuriy
15.07.2018
10:19:08
зачем там вообще американские версии?

Index
15.07.2018
10:19:15
https://downloads.haskell.org/~ghc/master/users-guide/glasgow_exts.html#extension-GeneralisedNewtypeDeriving
Так-то

Yuriy
15.07.2018
10:21:23
не вывод, а производ

Index
15.07.2018
10:21:32
Хорошо

Yuriy
15.07.2018
10:21:35
вывод производных
блин, всё равно по-русски коряво выходит

Ilya
15.07.2018
15:15:21
как переписать такую вот функцию, чтобы было красиво?
min' (Just x) (Just y) = Just (min x y)
min' (Just x) Nothing = Just x
min' Nothing (Just y) = Just y
min' Nothing Nothing = Nothing

Владислав
15.07.2018
15:18:49
min' mX mY = min <$> mX <*> mY
может?

Антон
15.07.2018
15:19:08

Ilya
15.07.2018
15:19:29

Владислав
15.07.2018
15:21:31
аа, там не совсем то
min' (Just x) Nothing = Just x
min' Nothing (Just y) = Just y
ну да, min' mX mY = min <$> mX <*> mY
здесь Nothing дает.

Ilya
15.07.2018
15:22:50
интересно, что для аналогичного max' оказывается верным, что max' = max, благодаря instance Ord a => Ord (Maybe a)
λ> max (Just 1) (Just 2)
Just 2
λ> max (Just 1) Nothing
Just 1
λ> max Nothing Nothing
Nothing

Pineapple
15.07.2018
15:23:05
Замениь последние три кейса на min' mx my = mx <|> my

Ilya
15.07.2018
15:23:08
жаль, что они из двух возможных инстансов выбрали не тот, который нужен мне :)

Google

Alexander
15.07.2018
15:23:15

Владислав
15.07.2018
15:23:44

Ilya
15.07.2018
15:23:55
за этим нет ничего
могли бы сделать, что Nothing больше (любого) Just a, разницы между двумя инстансами нет
min' mx my = liftA2 min mx my <|> mx <|> my
вот так получилось =)

Alexander
15.07.2018
15:36:51

A64m
15.07.2018
15:37:30
да

Ilya
15.07.2018
15:37:34

Alexander
15.07.2018
15:39:31
ну вообще с моей стороны оценивать читаемость этого кода конечно тупо, да

Pineapple
15.07.2018
15:43:11
min' :: Ord a => Maybe a -> Maybe a -> Maybe a
min' x y = fmap getMin (fmap Min x <> fmap Min y)
Min из Data.Semigroup

Ilya
15.07.2018
16:00:06
instance Semigroup a => Semigroup (Maybe a) where
Nothing <> b = b
a <> Nothing = a
Just a <> Just b = Just (a <> b)
полезный инстанс однако

A64m
15.07.2018
16:07:31
min' :: forall a. Ord a => Maybe a -> Maybe a -> Maybe a
min' = coerce ((<>) @(Maybe(Min a)))
ЗИРО КОСТ АБСТРАКШОН

Антон
15.07.2018
16:11:42

Ilya
15.07.2018
16:11:54

A64m
15.07.2018
16:13:18
ну ладно, не хотите как в яве типы указывать, можно писать до посинения тогда:
min' :: Ord a => Maybe a -> Maybe a -> Maybe a
min' = coerce ((<>) :: Ord a => Maybe (Min a) -> Maybe (Min a) -> Maybe (Min a))

Google

Ignat
15.07.2018
16:15:41

A64m
15.07.2018
16:16:09
нет конечно, в плюсах нету параметрического полиморфизма

Антон
15.07.2018
16:16:17

A64m
15.07.2018
16:24:41
в hie / vs-code появился кейс-сплит
обычно такая фича появляется в хаскельном ленгвидж-костыле перед тем как единственный мейнтейнер его забросит

Ilya
15.07.2018
16:25:22
а можно для вимеров про кейс-сплит? что это

A64m
15.07.2018
16:26:01
(но, если без шуток, уже есть ветка с костылением hie для 8.6 т.е. впервые ленгвидж-костыль может появиться не через месяцы после релиза нового гхц а почти сразу)

Admin
ERROR: S client not available

A64m
15.07.2018
16:27:10

Ilya
15.07.2018
16:28:54
крутая штука конечно

Никита
15.07.2018
16:33:27
Насчёт min для maybe
Если прописать что-то типа
(-) Nothing = Nothing, то
min' a b = -(max (-a) (-b))
Или я не прав?

Ilya
15.07.2018
16:35:36
через fmap протащить (-)

Антон
15.07.2018
16:37:21

Ignat
15.07.2018
16:37:25
но это +ограничение на тип

Ilya
15.07.2018
16:37:32

Никита
15.07.2018
16:40:56
Ток у этого способа читаемость не самая лучшая

Yuriy
15.07.2018
17:32:36
min' x y = fmap getMin $ ((<>) `on` fmap Min) x y
используется свойство инстанса полугруппы для Maybe

Антон
15.07.2018
17:33:46

Google

Yuriy
15.07.2018
17:34:06

Антон
15.07.2018
17:34:46

A64m
15.07.2018
17:37:51
сто лет уж коерс есть, нет, все фмапы лепят

Yuriy
15.07.2018
17:38:59
так безопаснее

Антон
15.07.2018
17:40:15

A64m
15.07.2018
17:41:57
все равно же принято сигнатуры типов писать, ну так хоть пользовались бы этим для выведения кода
выводить типы не хотят, выводить код не хотят, хотят только страдать

Yuriy
15.07.2018
17:42:25

A64m
15.07.2018
17:48:05
оказывается у эклипса и у вс код один "автор"
это что-то уровня фортран и фп, конечно

Антон
15.07.2018
17:50:10

Yuriy
15.07.2018
17:52:50
вот так менее страдательно?
min' :: Ord a => Maybe a -> Maybe a -> Maybe a
min' x y = coerce $ ((<>) `on` fmap Min) x y

A64m
15.07.2018
17:53:20
min' :: forall a. Ord a => Maybe a -> Maybe a -> Maybe a
min' = coerce ((<>) @(Maybe(Min a)))
ЗИРО КОСТ АБСТРАКШОН

Владислав
15.07.2018
17:54:46
min' = coerce ((<>) @(Maybe(Min a)))
а что здесь @ значит? типа on?

Yuriy
15.07.2018
17:55:01
чорт, я самый медленный тут

A64m
15.07.2018
17:55:56

Евгений
15.07.2018
17:56:40
А зачем ты форолл явно пишешь?

A64m
15.07.2018
17:57:11
чтоб a потом использовать в типе