@haskellru

Страница 1339 из 1551
Алексей Ayaye :)
14.07.2018
22:33:20
Биндинги для генерации на Haskell тоже есть
я предложил уже. он разве умеет хаскель генерировать?

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
min' mX mY = min <$> mX <*> mY может?
Не то, вернёт Nothing если хотя бы один Nothing

Ilya
15.07.2018
15:19:29
min' mX mY = min <$> mX <*> mY может?
не сработает в 2 и 3 кейсах

Владислав
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
Ilya
15.07.2018
15:23:55
потому что Nothing меньше Just a.
потому что они так решили

за этим нет ничего

могли бы сделать, что Nothing больше (любого) Just a, разницы между двумя инстансами нет

Замениь последние три кейса на min' mx my = mx <|> my
годится, но тогда надо целиком на комбинаторах, чтобы единый стиль

min' mx my = liftA2 min mx my <|> mx <|> my

вот так получилось =)

Alexander
15.07.2018
15:36:51
min' mx my = liftA2 min mx my <|> mx <|> my
ну так понятнее стало и читается проще (нет)

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
min' :: Ord a => Maybe a -> Maybe a -> Maybe a min' x y = fmap getMin (fmap Min x <> fmap Min y)
хорошо! и будет работать для произвольного числа аргументов

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))) ЗИРО КОСТ АБСТРАКШОН

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
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
а можно для вимеров про кейс-сплит? что это
h :: [a] -> a h xs = undefined БАБАХ! h :: [a] -> a h [] = undefined h (xs:xss) = undefined

Ilya
15.07.2018
16:28:54
h :: [a] -> a h xs = undefined БАБАХ! h :: [a] -> a h [] = undefined h (xs:xss) = undefined
так вот зачем нужны АТД, чтоб за тебя код иде писало

крутая штука конечно

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

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

Никита
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
min' x y = fmap getMin $ ((<>) `on` fmap Min) x y
min' = (fmap getMin .) . ((<>) `on` fmap Min)

Google
Yuriy
15.07.2018
17:34:06
min' = (fmap getMin .) . ((<>) `on` fmap Min)
о, у нас pointfree бот появился

Антон
15.07.2018
17:34:46
о, у нас pointfree бот появился
Your text does not look like Haskell code

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
Вместо .from()/.into()? Умно
вот это точно не Хаскель

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
min' = coerce ((<>) @(Maybe(Min a))) а что здесь @ значит? типа on?
это применение параметра типа, как foo<T> foo @T

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

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

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