Cheese
Алексей ayaye :)
как?
ну как, на Java написать
Алексей ayaye :)
Алексей ayaye :)
по аналогии с имеющимися
Cheese
ну, вариант
Dmitry
ANTLR не подходит?
Dmitry
Биндинги для генерации на Haskell тоже есть
Dmitry
@cblp_su ^
Dmitry
Действительно, не умеет
Dmitry
https://en.wikipedia.org/wiki/Comparison_of_parser_generators
Dmitry
Там какое-то GDK есть
Dmitry
Output languages: C, Lex, Haskell, HTML, Java, Object Pascal, Yacc
Алексей ayaye :)
я нашел только такую штуку, но похоже, это наоборот, чтобв из сгенерированного парсера на С вызывать код на хаскеле. Вообще не понимаю, зачем :)
Алексей ayaye :)
http://hackage.haskell.org/package/antlrc
Dmitry
В узлах обработку писать. Мне б такое лет пять назад пригодилось, тогда на Java обработку делал
Maxim
@cblp_su вы тоже пишете на qtah? :)
Копаюсь в их репозитории и вдруг вижу знакомое имя в коммитах
Cheese
Cheese
но ничего лучше всё равно не могу посоветовать, при условии опыта в Qt
Maxim
Ну мы сейчас на нем ведём проект, я вот один пр туда уже протолкнул
Cheese
там много тупого кода приходится дописывать в библиотеку, очень долго компилируется
Cheese
и ещё указатели нулябельные
Cheese
жди NPE на каждом шагу
Cheese
впрочем, не более, чем в C++
Ilya
https://downloads.haskell.org/~ghc/master/users-guide/glasgow_exts.html#extension-GeneralizedNewtypeDeriving
ого вот это фича в 8.6.1
Cheese
Глазго же
Vladislav
GND вроде давно уже, в 8.6 добавили DerivingVia
Cheese
Vladislav
Все равно ссылка не на то, z это American spelling
Cheese
зачем там вообще американские версии?
Vladislav
https://downloads.haskell.org/~ghc/master/users-guide/glasgow_exts.html#extension-GeneralisedNewtypeDeriving
Vladislav
Так-то
Cheese
не вывод, а производ
Vladislav
Хорошо
Cheese
вывод производных
Cheese
блин, всё равно по-русски коряво выходит
Ilya
как переписать такую вот функцию, чтобы было красиво?
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
Vladislav
min' mX mY = min <$> mX <*> mY
может?
Антон
Ilya
Vladislav
аа, там не совсем то
min' (Just x) Nothing = Just x
min' Nothing (Just y) = Just y
ну да, min' mX mY = min <$> mX <*> mY
здесь Nothing дает.
Ilya
интересно, что для аналогичного 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
Алексей
Замениь последние три кейса на min' mx my = mx <|> my
Ilya
жаль, что они из двух возможных инстансов выбрали не тот, который нужен мне :)
саша
Vladislav
Ilya
Ilya
за этим нет ничего
Ilya
могли бы сделать, что Nothing больше (любого) Just a, разницы между двумя инстансами нет
Ilya
min' mx my = liftA2 min mx my <|> mx <|> my
Ilya
вот так получилось =)
саша
A64m
да
саша
ну вообще с моей стороны оценивать читаемость этого кода конечно тупо, да
Алексей
min' :: Ord a => Maybe a -> Maybe a -> Maybe a
min' x y = fmap getMin (fmap Min x <> fmap Min y)
Алексей
Min из Data.Semigroup
Ilya
Ilya
instance Semigroup a => Semigroup (Maybe a) where
Nothing <> b = b
a <> Nothing = a
Just a <> Just b = Just (a <> b)
полезный инстанс однако
A64m
min' :: forall a. Ord a => Maybe a -> Maybe a -> Maybe a
min' = coerce ((<>) @(Maybe(Min a)))
ЗИРО КОСТ АБСТРАКШОН
Антон
Ilya
A64m
ну ладно, не хотите как в яве типы указывать, можно писать до посинения тогда:
min' :: Ord a => Maybe a -> Maybe a -> Maybe a
min' = coerce ((<>) :: Ord a => Maybe (Min a) -> Maybe (Min a) -> Maybe (Min a))
Ignat
A64m
нет конечно, в плюсах нету параметрического полиморфизма
Антон
A64m
в hie / vs-code появился кейс-сплит
обычно такая фича появляется в хаскельном ленгвидж-костыле перед тем как единственный мейнтейнер его забросит
Ilya
а можно для вимеров про кейс-сплит? что это
A64m
(но, если без шуток, уже есть ветка с костылением hie для 8.6 т.е. впервые ленгвидж-костыль может появиться не через месяцы после релиза нового гхц а почти сразу)
Ilya
Ilya
крутая штука конечно
Anonymous
Насчёт min для maybe
Если прописать что-то типа
(-) Nothing = Nothing, то
min' a b = -(max (-a) (-b))
Или я не прав?
Ilya
Ilya
через fmap протащить (-)
Антон
Ignat
но это +ограничение на тип
Ilya