@haskellru

Страница 1207 из 1551
Александр
17.05.2018
19:44:31
Это был оффтопик, даже парни на это указали.

Leonid
17.05.2018
19:45:37
Раньше имела, а теперь нет? Ну ок

Alexander
18.05.2018
07:40:57
/has_instance Monoid (Either a)

хм.. а почему нету?

Google
Alexander
18.05.2018
07:41:42
когда он мне так нужен

Oleg
18.05.2018
07:41:47
Ну вероятно нужно Monoid a

Alexander
18.05.2018
07:42:08
да хоть так, но никакого нету

Евгений
18.05.2018
07:42:37
Лямбдабота подвезли?

Oleg
18.05.2018
07:42:39
а ну там же можно и через Monoid a и через Monoid b empty выразить

т.е. непонятно empty - это Right или LEft

так что видимо, снова нютайпы

Alexander
18.05.2018
07:43:12
да, логично

но newtype-ов тоже не видно

ладно попишу бойлерплейт

Monoid a => f [a] -> f a это у нас что?

f - Foldable

λoλcat
18.05.2018
07:46:06
/has_instance Monoid (Either a)
Either a - дырявый

Google
Alexander
18.05.2018
07:46:07
ну и traversable

стоп, я же не это хочу

Dmitry
18.05.2018
07:51:19
как вот это вот: zipWith ($) [Char.isLetter, Char.isDigit] (repeat 'a') сделать более лучше?

т.е как вообще правильно строить сложные предикаты?

Alexander
18.05.2018
07:53:47
(Any Char.isLetter <> Any Char.isDigit) ?

а не

Dmitry
18.05.2018
07:55:09
не

Oleg
18.05.2018
07:55:22
liftA2 (&&)?

Alexander
18.05.2018
07:55:58
через liftA2 можно

Oleg
18.05.2018
07:56:11
а там зип

один на первый символ, второй на второй

attoparsec?

Alexander
18.05.2018
07:56:59
да, такое парсеком наверное логичнее всего

с Any кстати getAny $ (Any . Char.isLetter <> Any . Char.isDigit) 'a' (но к этой задаче не относится)

Dmitry
18.05.2018
07:59:45
чо-т так себе тоже

Alexander
18.05.2018
08:00:21
аттопарсек?

Dmitry
18.05.2018
08:03:13
аттопарсер - дороже выйдет если пропихивать как предикат в Data.Text.split например

foldl (||) False . zipWith ($) [Char.isLetter, Char.isDigit] . repeat

шляпа. как-то надо лучше

Pineapple
18.05.2018
08:06:20
getAny . mconcat [Any . isDigit, Any . isLetter] ?

Google
Pineapple
18.05.2018
08:06:54
Или надо по всем?

Alexander
18.05.2018
08:09:27
не там первое к первому элементу второе ко второму

Ilya
18.05.2018
08:10:03
Alexander
18.05.2018
08:10:07
fold . zipWith ($) [Char.isLetter, Any . isDigit]

Dmitry
18.05.2018
08:11:40
а что потом делается с этим списком [Bool, Bool] ?
сворачивается чем-нибудь - and или or

так что может как-то можно сразу сворачивать

Ilya
18.05.2018
08:20:22
Dmitry
18.05.2018
08:20:29
о.

Andrey
18.05.2018
10:40:19
а если более сложный случай, когда надо не були получать, а например, вместе с возможными сообщениями об ошибках и агрегировать их по ходу, если они возникают?

Alexander
18.05.2018
10:41:05
Validation

Andrey
18.05.2018
10:41:14
у меня красиво не получалось, делал обёртку через тип валидации

Alex
18.05.2018
10:41:14
Ну будет у тебя не Bool a Either

Andrey
18.05.2018
10:41:32
о, монада

Ilya
18.05.2018
10:41:34
ну только не and ., а and <$>

Andrey
18.05.2018
10:41:48
да-да

спасибо

Alexander
18.05.2018
10:41:55
http://hackage.haskell.org/package/validation

Andrey
18.05.2018
10:42:10
спасибо

Alexander
18.05.2018
10:42:26
это если собирать ошибки и все сразу и т.п.

Google
Andrey
18.05.2018
10:44:06
а то с точки зрения юзера как-то дико, когда неизвестно наперед обо что и сколько раз ещё спотыкаться..

Alexander
18.05.2018
10:45:32
ну если только у тебя аппликативное поведение

с монадическим ничего не сделать, придется спотыкатьс много раз

Andrey
18.05.2018
10:46:34
sequence вроде поможет, хотя чего гадать, посмотрю на пакет

Alexander
18.05.2018
10:48:11
не поможет, если у тебя поведение зависит от значения из предыдещего шага, а у тебя его нету то ты ничего не сделаешь

Ilya
18.05.2018
10:48:56
а нафига в Data.Traversable два sequence, кстати? sequenceA :: Applicative f => t (f a) -> f (t a) sequence :: Monad m => t (m a) -> m (t a)

для легаси кода, где Monad не требует Applicative?

Alexander
18.05.2018
10:53:06
исторически

а как наиболее красиво сделать: zipWith f x (tail x)?

Антон
18.05.2018
12:17:55
uncurry (zipWith f) . (&&&) id tail

Alexander
18.05.2018
12:18:56
ap (zipWith f) tail уж лучше так

Антон
18.05.2018
12:19:30
ap (zipWith f) tail уж лучше так
Ох, опять инстанс монады для функций

И zipWith f <*> tail — правильно?

Alexander
18.05.2018
12:22:18
выглядит верно

Антон
18.05.2018
12:24:40
fun f = zipWith f <*> tail main = print . fun (+) $ [1..8]

[3,5,7,9,11,13,15]

Работает

Можно ещё (<*> tail) . zipWith, чтобы уж совсем бесточечно :P

Ilya
18.05.2018
12:26:38
а как наиболее красиво сделать: zipWith f x (tail x)?
из всех вариантов этот (первый) самый лучший

Google
Dmitry
18.05.2018
12:32:39
A есть разница с точки зрения вычисления и сохранения x в этих вариантах?

Антон
18.05.2018
12:33:01
Нет

Просто у первого варианта наименьшая ментальная нагрузка

Dmitry
18.05.2018
12:34:01
Да, это так.

Хотя трудно удержаться...

Антон
18.05.2018
12:36:21
Не волнуйся, это не го, тебя не будут пинать за сложные решения :D

Alexander
18.05.2018
12:38:57
но это не точно

Антон
18.05.2018
12:41:09
но это не точно
По крайней мере, не так сильно

Alexander
18.05.2018
12:41:56
да

Андрей
18.05.2018
12:42:29
Сам через месяц свой кот просто не поймешь с первого взгляда, а так никто ругать не будет

Ilya
18.05.2018
13:14:15
а как наиболее красиво сделать: zipWith f x (tail x)?
А кстати можно красиво через extend сделать, но это будет работать только на бесконечных списках:)

Dmitry
18.05.2018
13:50:35
По мелочи - я бы tail на (drop 1) заменил.

Denis
18.05.2018
13:51:58
По мелочи - я бы tail на (drop 1) заменил.
зачем? tail это просто _:xs -> xs деконструктор

Антон
18.05.2018
13:52:20
Yuriy
18.05.2018
13:58:36
слово "частичная" не отражает всю глубину падения. лучше называть такие функции, например, недоопределёнными

Ilya
18.05.2018
13:59:20
По мелочи - я бы tail на (drop 1) заменил.
не надо ни в коем случае

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