
? animufag ?
09.03.2017
12:30:37
гхц-джс или там элм пурскрипт?

melancholiac
09.03.2017
12:30:54
эльм

? animufag ?
09.03.2017
12:30:59
кстати джс конф на порядок больше, так что мб эта не самая удачная
ну давай

Google

melancholiac
09.03.2017
12:32:02
type alias Model =
{ name : String
, password : String
, passwordAgain : String
}
model : Model
model =
Model "" "" ""
model : Model - это функция без параметров?

? animufag ?
09.03.2017
12:32:59
да

melancholiac
09.03.2017
12:33:06
спасибо

Dmitry
09.03.2017
12:33:20
чем это отличается от "значение" ?

? animufag ?
09.03.2017
12:33:32
ой всё
ща опять про концепции будет спор

Евгений
09.03.2017
12:56:41

Oleg
09.03.2017
12:58:09

Евгений
09.03.2017
12:58:18
чем это отличается от "значение" ?
По-моему понятие значения можно несколькими образами спроецировать на haskell. Это зависит от того считаем ли мы, что бывают значения с эффектами, или нет

Oleg
09.03.2017
12:59:47
а я думал, что зависит от того, мономорфная или нет

Евгений
09.03.2017
13:01:38

Dmitry
09.03.2017
13:02:00
зато всегда есть о чём поговорить

Google

Евгений
09.03.2017
13:02:14

Oleg
09.03.2017
13:02:24

Евгений
09.03.2017
13:03:31
Я не уверен, что вполне корректно crap значением. Это практически что угодно

Oleg
09.03.2017
13:07:54

melancholiac
09.03.2017
15:34:07
type Msg
= Name String
| Password String
| PasswordAgain String
я так понял это объявления нового типа Msg, который будет string, но при этом будет иметь 1 из 3 подтипов, которые просто различные псевдонимы для string
верно?

Dmitry
09.03.2017
15:35:30
или просто ADT с тремя конструкторами

Quet
09.03.2017
15:35:43

Dmitry
09.03.2017
15:36:34
довольно забавно проводить аналогии, но, вероятно, в Elm-е обычный хиндли-милнер с обычными для языков ml-группы типами?

melancholiac
09.03.2017
15:36:48
но при этом компилятор различает string созданные разными конструкторами?

Quet
09.03.2017
15:37:36

Dmitry
09.03.2017
15:37:54
string это просто тип того, что сидит в конструкторе

Quet
09.03.2017
15:38:18
и да, создавать их тоже в разных местах input [onInput PasswordAgain] [] ...

? animufag ?
09.03.2017
15:41:26

Dmitry
09.03.2017
15:42:12
могут быть тонкие вещи, типа окамловских полиморфных вариантов
или как там они назывались

? animufag ?
09.03.2017
15:42:26

Quet
09.03.2017
15:42:40

melancholiac
09.03.2017
15:44:16
спасибо

Тёма
09.03.2017
16:30:30

Google

melancholiac
09.03.2017
16:30:53

Тёма
09.03.2017
16:30:53
Хороший пример. Дальше с фотками будет)

melancholiac
09.03.2017
16:31:29

Quet
09.03.2017
16:33:43
а что с ними?

melancholiac
09.03.2017
16:37:04
траблы с типами
upd: я идиот и не смотрю на то что функция возвращает

Alexander
09.03.2017
19:01:28
блин третий день с TH бился
в общем если вы хотите писать foo (x:xs) = [e| ... $(foo xs) ... |] не делайте так
а перепишите через let ts = map fooOne xs и потом compose отдельным чем-нить
иначе треш угар OOM-killer сегфолты и прочие звери

Quet
09.03.2017
19:04:45
баг в ghc ?

Alexander
09.03.2017
19:06:33
наверное
не смогу зарепортить, у меня минимального кейса нет

Misha
10.03.2017
11:02:23
вопрос знатокам: заметил что уже несколько раз написал что-то типа
let x = [ w | (_, Just w) <- maybeX ]
let notX = [ n | (n, Nothing) <- maybeX ]
есть ли какой-то более красивый способ это делать? в один проход например

Dmitry
10.03.2017
11:02:54
Data.List
какой-нибудь partition
или span
там их штук 15. посмотри подходящую

Misha
10.03.2017
11:03:17
а
там только partition :: (a -> Bool) -> [a] -> ([a], [a])

Google

Misha
10.03.2017
11:05:03
про него я помню, он тут не укоротит ничего особо

Dmitry
10.03.2017
11:05:04
не подходит?

Misha
10.03.2017
11:05:24
можно с isJust конечно

Dmitry
10.03.2017
11:05:26
partition (snd.isJust) wtf

Misha
10.03.2017
11:05:34
угу

Dmitry
10.03.2017
11:05:43
ну для тонких ценителей - все то же самое + линзы

Misha
10.03.2017
11:06:28
линзы не трогаю почти что специально
потому что там надо много знать, иначе похоже на магию

? animufag ?
10.03.2017
11:06:50

Dmitry
10.03.2017
11:07:41
ну сначала разделить на два, потом одному catMaybes

Serghei
10.03.2017
11:15:56
кто-то идет на https://www.facebook.com/events/331301360599068/ ?

Misha
10.03.2017
11:16:55
let (x', nx') = L.partition (isJust . snd) maybeX
let (x, nx) = (mapMaybe snd x', map fst nx')
вот там можно
так
проходов впрочем все равно два
надо в педагогических целях с фолдом сделать

Dmitry
10.03.2017
11:27:00
анфолдом кстати можно
в один проход и с кейсом
но в принципе разницы фолдом или анфолдом тут нет

Misha
10.03.2017
11:27:33
splitMaybes :: [(a, Maybe b)] -> ([(a, b)], [a])
splitMaybes [] = ([], [])
splitMaybes ((x, Just y) : ps) = let (x', y') = splitMaybes ps in ((x, y) : x', y')
splitMaybes ((x, Nothing) : ps) = let (x', y') = splitMaybes ps in (x', x : y')

Google

Misha
10.03.2017
11:27:56
прозреваю утечки и прочие заборы с коровниками
надо ! аккуратно расставлять

Dmitry
10.03.2017
11:29:23
зачем тут явная рекурсия?

? animufag ?
10.03.2017
11:32:16
Я просто никогда особо не интересовался но это же просто обход списка
Звучит как будто ты на си пишешь

Misha
10.03.2017
11:35:05
и вообще надо с аккумулятором
все плохо

Dmitry
10.03.2017
11:35:49
миллионы элементов в списке?

Misha
10.03.2017
11:38:36
нет, их там мало и на самом деле совершенно неважно с практической точки зрения
у меня тут скорее педагогический интерес
как "красиво"

Dmitry
10.03.2017
11:39:27
фолд + case
ну и лучше не грузиться, в хаскеле миллион способов написать одно и то же, если грузится тем, как красиво не напишешь ничего никогда.

Alexander
10.03.2017
11:40:22
splitMaybes = (,) <$> mapMaybe (\(a,mb) -> (a,) <$> b)
<*> mapMaybe (\(a,mb) -> maybe a (const Nothing))
покатит?
хотя сложно
splitMaybes = partitionEither . map (\(a,mb) -> maybe (Right a) (\x -> Left (a,x))
@lolepezy ^^

Dmitry
10.03.2017
11:43:15
два прохода