melvin
Влод
гхц-джс или там элм пурскрипт?
melvin
эльм
Влод
кстати джс конф на порядок больше, так что мб эта не самая удачная
Влод
ну давай
melvin
type alias Model =
{ name : String
, password : String
, passwordAgain : String
}
model : Model
model =
Model "" "" ""
melvin
model : Model - это функция без параметров?
Влод
да
melvin
спасибо
Dmitry
чем это отличается от "значение" ?
Влод
ой всё
Влод
ща опять про концепции будет спор
Евгений
Евгений
чем это отличается от "значение" ?
По-моему понятие значения можно несколькими образами спроецировать на haskell. Это зависит от того считаем ли мы, что бывают значения с эффектами, или нет
Oleg
а я думал, что зависит от того, мономорфная или нет
Евгений
чем это отличается от "концепция" ?
Хз. Мне казалось, что я могу уловить разницу, но когда попробовал построить концепцию понятия и понятие концепции, не смог её поймать
Dmitry
зато всегда есть о чём поговорить
Евгений
Oleg
Евгений
Я не уверен, что вполне корректно crap значением. Это практически что угодно
melvin
type Msg
= Name String
| Password String
| PasswordAgain String
я так понял это объявления нового типа Msg, который будет string, но при этом будет иметь 1 из 3 подтипов, которые просто различные псевдонимы для string
melvin
верно?
Dmitry
или просто ADT с тремя конструкторами
Quet
Dmitry
довольно забавно проводить аналогии, но, вероятно, в Elm-е обычный хиндли-милнер с обычными для языков ml-группы типами?
melvin
но при этом компилятор различает string созданные разными конструкторами?
Dmitry
string это просто тип того, что сидит в конструкторе
Quet
и да, создавать их тоже в разных местах input [onInput PasswordAgain] [] ...
Влод
Dmitry
могут быть тонкие вещи, типа окамловских полиморфных вариантов
Dmitry
или как там они назывались
Влод
Quet
melvin
спасибо
Anonymous
melvin
Anonymous
Хороший пример. Дальше с фотками будет)
melvin
Quet
а что с ними?
melvin
траблы с типами
melvin
upd: я идиот и не смотрю на то что функция возвращает
Alexander
блин третий день с TH бился
Alexander
в общем если вы хотите писать foo (x:xs) = [e| ... $(foo xs) ... |] не делайте так
Alexander
а перепишите через let ts = map fooOne xs и потом compose отдельным чем-нить
Alexander
иначе треш угар OOM-killer сегфолты и прочие звери
Quet
баг в ghc ?
Alexander
наверное
Alexander
не смогу зарепортить, у меня минимального кейса нет
Misha
вопрос знатокам: заметил что уже несколько раз написал что-то типа
let x = [ w | (_, Just w) <- maybeX ]
let notX = [ n | (n, Nothing) <- maybeX ]
есть ли какой-то более красивый способ это делать? в один проход например
Dmitry
Data.List
Dmitry
какой-нибудь partition
Dmitry
или span
Dmitry
там их штук 15. посмотри подходящую
Misha
а
Misha
там только partition :: (a -> Bool) -> [a] -> ([a], [a])
Misha
про него я помню, он тут не укоротит ничего особо
Dmitry
не подходит?
Misha
можно с isJust конечно
Dmitry
partition (snd.isJust) wtf
Misha
угу
Dmitry
ну для тонких ценителей - все то же самое + линзы
Misha
линзы не трогаю почти что специально
Misha
потому что там надо много знать, иначе похоже на магию
Влод
Dmitry
ну сначала разделить на два, потом одному catMaybes
Serghei
кто-то идет на https://www.facebook.com/events/331301360599068/ ?
Misha
let (x', nx') = L.partition (isJust . snd) maybeX
let (x, nx) = (mapMaybe snd x', map fst nx')
Misha
вот там можно
Misha
так
Misha
проходов впрочем все равно два
Misha
надо в педагогических целях с фолдом сделать
Dmitry
анфолдом кстати можно
Dmitry
в один проход и с кейсом
Dmitry
но в принципе разницы фолдом или анфолдом тут нет
Misha
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')
Misha
прозреваю утечки и прочие заборы с коровниками
Misha
надо ! аккуратно расставлять