Это копия, сохраненная 25 января 2015 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
http://sel4.systems/
http://github.com/seL4
https://github.com/seL4/l4v#overview
https://github.com/seL4/seL4/tree/master/haskell
Последние гхц и каббала с песочницами теперь доступны и домохозяйкам:
http://www.haskell.org/pipermail/haskell/2014-July/024276.html
и ануса
Научишься юзать ФВП в других языках. Даже в императивном коде у тебя станет больше чистых функций и иммутабельных объектов.
Ну и мозги немного размять, чтобы не засохли от энтерпрайзной унылоты.
То есть, привить себе хороший стиль писания кода на императивных языках? А самоценность у функциональных языков есть какая-то?
> А самоценность у функциональных языков есть какая-то?
функциональные языки - это полигон, близкое будущее, а не настоящее.
Можешь, конечно, разрешаю. Но тут-то это ПРОЩЕ!
Возможно, вы имели в виду: забытое прошлое
Тебе надоело писать много тестов и боятся что что-нибудь сломается после рефакторинга, и ты бы предпочел по больше подумать сначала чем мучиться потом.
Чистой функциональщине нужно на порядок меньше тестов. Которые дадут намного больше уверенности кстати.
Попробуй потрогать большой проект на питоне например. Вот у меня есть такой на работе. Там хренова гора тестов, при более-менее радикальном изменении функционала треть тестов придётся снести минимум. Основная часть кода - воссоздание условий для небольшого ассерта.
В хаскеле я просто пишу ассерты. Без бойлерплейта. Монадный код конечно болеет той же болезнью, но во-первых ты знаешь какой код у тебя монадный, появляется большая уверенность в чистых функциях. Во-вторых само разделение на функции сильно очищает тесты и сам код: есть только вход и выход, никаких полей, других объектов внутри и прочего, ты сам будешь стремиться очистить список аргументов, а не передавать непомерно разросшийся объект куда ни попадя.
Зк - один большой хачкель-тред. Зачем отдельный-то создавать?
>А серьезно если? Я думал может мне обмазаться функциональщиной, но какие профиты?
Если ты не хочешь писать конкретно на Хаскеле, то профитов от обмазывания функциональщиной никаких. Но сам язык охуенный сам по себе.
>>374079
Никогда не понимал смысла платформы. Ну добавить к стандартной поставке гохаце кабал, алекс и хеппи, будет платформа. Вернее добавить к гохаце кабал, и всё, больше никакой разницы между работой с платформой и с "чистым" GHC я не заметил.
Раз у тебя вообще возник такой вопрос, значит, тебе это точно не нужно.
>конкретно на Хаскеле
Так ведь хацкель говно.
Есть же не настолько уебищные функ.язы - нет, питурды будут жрать протухший форс.
Потому что дегенераты без мозгов и воли - черви-пидоры, короче.
Ага оно самое, тоже радугой от аниме
>Есть же не настолько уебищные функ.язы
К сожалению нет. Хаскель не только лучший ФЯ, он вообще чуть ли не единственный ФЯ с достаточно развитой инфраструктурой для написания реальных программ. Поэтому я написал, что навыки функционального программирования, приобретенные в Хаскеле, практически бесполезны: других фЯ на горизонте не видно, а попытки использовать их в не ФЯ не приведут ни к чему хорошему.
>это сажебыдло с форсом хацкеля
Ясно.
Просто ты дебил и не знаешь других языков.
Да и хацкеля не знаешь, так-то.
ФП — это иммутабельность, referencial transparency и функции высших порядков. Всё это в кложуре есть, что делает её самым настоящим функциональным языком.
P.S. Статическая типизация или динамическая — не имеет значения. Это отдельный концепт. Причём как у первого, так и у второго типа есть свои преимущества и свои недостатки. Невежественно считать, что что-то одно из этого лучше другого.
Незачем. Хаскель - это чёрная дыра, время, которое ты потратишь на его изучение будет потрачено абсолютно без пользы. Использовать в реальной работе ты его никогда не будешь, сказки про то, что изучение Хаскеля сделает тебя лучшим программистом - такая же безосновательная хуйня. Ну, правда, можно срать в /зк, если это для тебя важно. Лучше потрать это время на изучение языков, на которых ты реально пишешь.
> сказки про то, что изучение Хаскеля сделает тебя лучшим программистом - такая же безосновательная хуйня
Не знаток Хаскеля, но предполагаю, что изучение общей алгебры сделало меня лучшим программистом… косвенно. Может быть, мой код и не стал лучше, но лучше стал я сам и стал немного больше понимать и получать больше удовольствия от того, что делаю.
Наверное, Хаскель можно сравнить с математикой.
Поддерживаю. И вообще - в Python, PHP, Ruby есть куча потенциальных ошибок из-за отсутствия статической проверки типов. В Haskell - наоборот, максимум ошибок выявить при компиляции, минимум в рантайм.
Собственно, вопросы. Как это работает в откомпилированной программе? Можно ли получить типы с ленивыми сигнатурами?
Тестовый пример:
{-# LANGUAGE ExistentialQuantification #-}
import System.IO
class S a where
s :: a->[Int]
data B1 a = B1
p1::(B1 a) -> a
p1 = undefined
instance S a => S (B1 a) where
s x = 1:(s $ p1 x)
data B0 = B0
instance S B0 where
s _ = []
u:: a -> B1 a
u= undefined
data SE = forall a. (S a) => SE a
instance S SE where
s (SE x) = s x
l:: SE -> SE
l (SE x)= SE $ u x
r:: SE
r= l r
main = do
print $ s (undefined:: B1 (B1 B0))
putStrLn "Enter a number:"
hFlush stdout
n<- readLn
print $ s $ (iterate l (SE B0)) !! n
putStrLn "Enter a number:"
hFlush stdout
k<- readLn
print $ (s r) !! k
Собственно, вопросы. Как это работает в откомпилированной программе? Можно ли получить типы с ленивыми сигнатурами?
Тестовый пример:
{-# LANGUAGE ExistentialQuantification #-}
import System.IO
class S a where
s :: a->[Int]
data B1 a = B1
p1::(B1 a) -> a
p1 = undefined
instance S a => S (B1 a) where
s x = 1:(s $ p1 x)
data B0 = B0
instance S B0 where
s _ = []
u:: a -> B1 a
u= undefined
data SE = forall a. (S a) => SE a
instance S SE where
s (SE x) = s x
l:: SE -> SE
l (SE x)= SE $ u x
r:: SE
r= l r
main = do
print $ s (undefined:: B1 (B1 B0))
putStrLn "Enter a number:"
hFlush stdout
n<- readLn
print $ s $ (iterate l (SE B0)) !! n
putStrLn "Enter a number:"
hFlush stdout
k<- readLn
print $ (s r) !! k
Программирование это чёрная дыра, время, которое ты потратишь на его изучение будет потрачено абсолютно без пользы.
Кампуктер это чёрная дыра, время, которое ты потратишь на его изучение будет потрачено абсолютно без пользы.
Я даже боюсь перечитывать твой пост. Вдруг говно в голове заразно?
Для иллюстрации мы воспользуемся числами Пеано, у них компактное определение, всего два конструк-тора, которых тем не менее достаточно для описания множества натуральных чисел:
module Nat where
data Nat = Zero | Succ Nat
deriving (Show, Eq, Ord)
Конструктор Zero указывает на число ноль, а (Succ n) на число следующее за данным числом n. В
последней строчке мы видим новый класс Ord, этот класс содержит операции сравнения на больше/меньше:
И больше про него нет ничего. Дальше упражнения надо с ними делать, а как? Если не объясняется нихера по этим внутрифункциональным рекурсиям и succ? Пидоры вы, я только время трачу на эту никому ненужную хуйню с неподдерживаемым кодом по причине нечитаемости.
dpSwitch :: Functor col =>
(forall sf . (a -> col sf -> col (b, sf)))
-> col (SF b c)
-> SF (a, col c) (Event d)
-> (col (SF b c) -> d -> SF a (col c))
-> SF a (col c)
Во-первых, это не просто "должно быть", но не должно быть ничего, кроме этого. Например, поддержка иммутабельности есть во всех языках (ничего не мешает на Си писать с иммутабельностью), не должно быть мутабельности. Нужна не просто ссылочная прозрачность, но и независимость от порядка исполнения (в идеале), или хотя бы нормальный порядок (как в Хаскеле), без этого никакой ссылочной прозрачности на самом деле нет. Также не может быть её и без статической типизации: тип описывает, что делает функция, проверка типов не позволяет нарушить некоторые правила - например вызвать нечистую функцию из чистой. А если в языке нет иммутабельности и ссылочной прозрачности - то как его можно считать функциональным?
>сказки про то, что изучение Хаскеля сделает тебя лучшим программистом - такая же безосновательная хуйня
Согласен, знание Хаскеля - это необходимое условие, а не достаточное условие. Т.е. знаешь Хаскель - еще не обязательно являешься хорошим программистом. Не знаешь Хаскель - 100% быдлокодер.
Однажды ученик пришел к мастеру и сказал:
- Мастер, я уже три года изучаю в монастыре функциональное программирование, расскажи мне, что такое монада?
- Хорошо, - сказал мастер - ты уже действительно изучаешь функциональное программирование достаточно долго, пришло и твое время узнать, что такое монада. Приходи завтра на рассвете, мы отправимся в горы.
На рассвете следующего дня ученик пришел к мастеру функционального программирования и они отправились в путь.
- Смотри, - сказал мастер, указывая с вершины на их монастырь и монастырские поля, лежащие как на ладони.
Ученик два часа созерцал, не произнося ни слова.
- Теперь ты понял, что такое монада? - спросил мастер.
- Нет, ответил ученик.
- Какой глупый ученик! - сказал мастер и ударил его посохом.
Ну что тут можно сказать, этот мастер сломался. Алсо, видел сию пасту год назад в ньюфажном разделе. Когда мастер помрет - монады помрут вместе с ним. Ибо и они в нем, и он есть монада, и сам под кислотой.
Можешь книгу степ бай степ порекомендовать? Без ебнутых "это я вам потом объясню, просто записывай за мной" и отсылок к Бодхидхарме. Только практическая часть, только софткор.
К сожалению, хаскелеаутисты не способны в человеческие гайды.
Но ты можешь посмотреть основные идеи на примере других языков:
http://rustbyexample.com/enum.html
http://www.hydrocodedesign.com/2014/04/02/higher-kinded-types/
http://typeclassopedia.bitbucket.org/
http://etorreborre.blogspot.ru/2013/06/a-zipper-and-comonad-example.html
Ну или ты всё-таки хочешь мануал по хаскелю: http://anton-k.github.io/ru-haskell-book/book/6.html
>подразумевает, что в хачкеле нет мутабельности
Тебя уже обоссали, хочешь быть ещё и обосраным?
>Алсо, видел сию пасту год назад в ньюфажном разделе.
Но как? Я её только что придумал!
>Можешь книгу степ бай степ порекомендовать?
Могу. Даже несколько:
Real World Haskell - унылейшее говно, которое только отобьёт желание изучать Хаскель.
The Haskell School of Expression - хороша книга, правда с того времени как она была написана, все используемые в ней библиотеки протухли. А если ты настолько виртуозно владеешь кабалом, чтобы все их собрать, тебе уже не нужна никакая книга.
The Haskell School of Music - гемора с библиотеками чуть меньше, чем в School of Expression (только их на кабале нет, надо качать с сайта автора и собирать ручками), но после неё ты ничему не научишься.
Еще есть Learn You a Haskell for Great Good - тоже пустая трата времени да еще с каким-то детсадовским юмором.
Алсо Хаскель нельзя освоить по книге. В нём с каждой версией компилятора появляется что-то новое.
> Хаскель нельзя освоить по книге
> книгу степ бай степ
Более того, сама просьба некорректна. Хаскель - это ещё и набор личностных качеств. Не присущих вам, если нижеприведённых ресурсов недостаточно:
http://www.google.com (и альтернативы)
http://www.haskell.org/
http://www.reddit.com/r/haskell
http://stackoverflow.com/questions/tagged/haskell
http://citeseerx.ist.psu.edu/index
И вообще, все эти вопросы "как мне выучить хаскель можно ли нужно ли" в своих предпосылках абсолютно аналогичны "как мне выучить программирование можно ли нужно ли".
Начинай с The Haskell School of Expression дальше читай Typeclassopedia (http://www.haskell.org/wikiupload/8/85/TMR-Issue13.pdf), дальше статьи по ссылкам в тайпклассопедии, викикнигу (http://en.wikibooks.org/wiki/Haskell), а точнее отдельные главы. Ну и вики на haskell.org.
Некоторые няшечки могут посоветовать Душкина (беги от этой книги, как от чумы), Грема Хаттона или "Изучи себе хаскель во имя великой справедливости" - не слушай их, только напрасно потратишь время.
Ну а после изучения нормального языка программирования уже сам решишь, нужен ли тебе этото самое программирование.
скачай в зипе
самофикс.
Спасибо, но все же софтина на хард интересует. Неужели нет вариантов кроме "платформы" и гхц-кабал?
>Тупо ghc
Почти столько же, сколько и платформа.
>Есть варианты покомпактнее?
Вот тут создай себе бесплатный аккаунт https://www.fpcomplete.com/
Как привить себе Haskell like мышление? Похоже я делаю это неправильно, я устал трахаться, помогите мне.
Так и должно быть. Код будешь на джяве писать.
Но ведь хаскель не нужен.
Дональд Кнут написал свое искусство программирования, используя ассемблер, и правильно сделал. А малолетнее школиё думает, что функциональщина делает их крутыми спецами. Хахаха. Функциональшина это просто уродливая надстройка над простым и ясным языком машины.
Ирония в том, что школота дрочит на "искусство программирования" из-за его названия, при том, что эта монография ни к искусству ни к программированию отношения не имеет.
Лол, ты хочешь сказать, что алгоритмы и структуры данных не имеют отношения к программированию?
Ты дурак?
Напиши что-нибудь вычислительное для начала. Без монад.
Haskell like мышление заключается в том, чтобы подходить к архитектуре программ, как алгебраист к архитектуре математики, то есть структурно, исходя из фундаментальных вещей, а не из понятий, которыми оперирует бизнес-домен/предметная-область и прочее говно.
Т.е. вся суть мышления в том, что оно основывается только на пустых, ни с чем не связанных абстракциях, ибо ты даже не сможешь человеческим языком объяснить что это за фундаментальные вещи, при чём здесь алгебра и т.п. и каким образом это может понадобиться.
>пытается сделать вид, что оппонент не предоставил "пруфоф" при том, что никаких "пруфоф" сам не запрашивал
понятно.
Пока ты четко не поймёшь, что такое абстракция, твоё развитие как программиста невозможно - всё будет как об стену горох.
Нет, Маня, не виляй жопой, я сказал пустая, ни с чем не связанная абстракция. Как если я начну придумывать новые слова, которые ничего не означают.
Однажды я видел тут хаскелистов, которые решали задачу по подсчёту количества символов в числе через функцию длинны строки.
>>374078
Ты подал мне интересную идею как выучить наконец Пролог.
>>374909
Если бы ты привёл аргумент, то я бы угостил тебя чаем со смородиновым листом, но ты просто накакал и выставил схемобогов такими же школьниками как ты сам
В это раз решил изъебнуться и повторить то же на Хаскеле, с использованием HXT.
Уже несколько дней ебусь. Эта их ебучая стрелка, вместо того чтобы заниматься тупо разбором XML/HTML, пытается стать самой главной, для этого в неё можно поднимать IO. При этом семантика самой стрелки ниразу не прозрачная. Как только я начинаю считать, что разобрался, она преподносит мне новый сюрприз.
И хочется сказать, что библиотека — переусложнённое говно, но ведь её используют! 77 обратных зависимостей. Значит, она не говно, просто у меня не хватает интеллекта для работы с ней? Выходит так, да?
P. S. Стрелочные законы не соблюдаются, но это, видимо, баг. Надо зарепортить.
> выставил схемобогов такими же школьниками как ты сам
Если бы ты привёл аргумент, впрочем напою тебя мочой.
>решил изъебнуться и повторить то же на Хаскеле
вот где твоя проблема. ты же не используешь самокат для путешествия по стране, так же и тут.
either putStrLn (writeFile fname)[/CODE]
И хули говорят, что pointfree нечитаем? Заебись читаем.
Это ещё не то, что подразумевают под "pointfree". Вот если бы у тебя не было url и fname - тогда да.
Просто ты не привык к программированию вообще. Тебе надо несколько лет регулярно этим заниматься - и тогда это будет занимать несколько часов, а не несколько дней. Почти уверен, если ты начнёшь разбираться с каким-нибудь Spring, даже с маленькой его частью, отвечающей только за DI или, скажем, только за AOP - будет то же самое.
Лично у меня то же самое в любой малознакомой мне области. Старт долгий и тяжкий, всё неинтуитивно и занимает много времени, на одну примитивную задачу уходит 10 часов. Но стоит продвинуться чуть дальше - и уже за 1 час решается 10 более сложных, и так далее.
Во-первых, возможно, ты руби знаешь лучше, чем хачкел, во-вторых, nokogiri - это как-бы вообще либа для разбора html по css-селекторам. Разбор xml - это гораздо более общий случай. Если ты будешь свободно ориентироваться в хаскеле, и использовать только снаружи-внутрь-css-селекторное подмножество hxt, не задаваясь целью понять все фичи библиотеки, концептуально сложнее не будет. Скорее, некоторые вещи будет даже гораздо проще выразить, чем пришлось бы в nokogiri.
> nokogiri - это как-бы вообще либа для разбора html по css-селекторам
Хотя нет, xml/xpath там всё-таки есть. Хуй знает, с чем я перепутал.
> Но ведь то, что предназначено для сложных юзкейзов, должно работать и с простыми, так?
Да, оно и работает, но в зависимости от твоих хачкел скиллов и развитости твоего абстрактного мышления, оно может занимать от меньшего количества времени до гораздо большего.
И бесконечное количество примеров, не укладывающихся приемлимым (или вообще каким-либо) образом в эти частные случаи.
Далеко не только. Например, мутировать элементы массива с изменяющимся по какому-нибудь закону (кроме i=1..n) индексом так, что каждое новое значение кроме старого и индекса зависит ещё от каких-нибудь значений (возможно, уже изменившихся на одной из предыдущих итераций текущего цикла) в этом же массиве. В этот пример я упаковал сразу несколько концепций, которые и по-отдельности невыразимы через map/filter и, нормальным образом, fold.
Пробовал возвращать каждый раз left_part ++ [mutated_value] ++ right_part? Или Data.List.delete + insert?
В целом всё выразимо, но приходится возвращать целый список при операции с одним элементом. Интересно насколько ленивость может нивелировать затраты? Должна по идее сводить их почти к нулю.
Ебать дибил. Списки вообще не рассматриваются - у них доступ по индексу O(n). Я-то думал, ты хотя бы про всякие http://hackage.haskell.org/package/array-0.5.0.0/docs/Data-Array-MArray.html#g:5
Не пизди, откуда тебе вообще знать? Типикал ДП с табулированием функции по массиву с обратными обращениями к вычисленным на прошлых итерациях элементам никак нельзя переформулировать принципиально иначе, чтобы оно было так же эффективно, просто, и удобно.
Делай итерацию на map. И рекурсию на сколько тебе там надо раз. Разовый перебор списка убирает O(n) сложность. Вычисти функцию делающую непосредственные вычисления - чтобы она не брала агрумент-массив.
Ясно.
>структурно, исходя из фундаментальных вещей
Вот как раз этого мне и не хватает, все мои функции залипают в IO, отчего не могу использовать удобства языка.
Что посоветуешь? SICP?
>решали задачу по подсчёту количества символов в числе через функцию длинны строки.
show a =>a->Int
Так? Но ведь это правильно
Ни в коем случае не SICP. Просто прочитай целиком и прорешай exercises здесь:
1. http://www.haskell.org/haskellwiki/Typeclassopedia
2. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.123.1351 (справа сверху кнопка "pdf")
Дальше уже сам разбирайся. Можешь что-то отсюда почитать - http://www.haskell.org/haskellwiki/Research_papers/Monads_and_arrows , но я бы посоветовал вообще переключиться на учебники по алгебре и теоркату. Начать можно с общей алгебры ( https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0#.D0.9A.D0.BB.D0.B0.D1.81.D1.81.D0.B8.D1.84.D0.B8.D0.BA.D0.B0.D1.86.D0.B8.D1.8F ). Перед этим прочитай на вики, что это такое, как соотносится с элементарной/школьной, как с универсальной, и подбери подходящий учебник (набери в гугле и переходи по ссылкам только на что-то нормальное типа math.stackexchange). Обязательно решай все задачи. Не ссы, если нет ответов, и не уверен, что решил правильно.
Правильно, но лучше
[code]countDigits x
| x == 0 = 1
| x < 0 = countDigits (-x)
| otherwise = length $ takeWhile (/= 0) $ iterate (`div` 10) x[/code]
Ну я еще здесь, просто не пишу ничего. Всё уже было написано несколько лет назад, обсуждать больше нечего, участвовать в спецолимпиадах лень, писать пасты вдохновение кончилось.
Стасик
Было бы круто перерождение чего-то вроде /c/, но с алгеброй, теоркатом, анализом, комбинаторной теорией игор, асимптотикопетушением, п=нп, обсуждением архитектуры методов решения олимпиадных задач, конструктивными доказательствами 2+2, парсингом яндекс капчи, и так далее. Угар закончился, потому что все уже поняли, что программирование гавно и нечего тут обсуждать (алтфаки заходят на все эти доски чисто по привычке). А полноценных формалсцаенсов до конца жизни хватит.
>Было бы круто перерождение чего-то вроде /c/, но с алгеброй, теоркатом, анализом, комбинаторной теорией игор,
то во что ты не можешь да?
Да, то, в чём я начинающий, но что мне интересно. Когда-то я и в кодинге был нуб, но мне было интересно, и потому я изучал лишп и заходил в /c/.
>Да, то, в чём я начинающий, но что мне интересно.
книжки ты не читаешь, а хочешь просто мнение анонимного полуалкоголика или студента? ты может не знаешь, что вся эта хуйня счас устроилась на работы, поэтому пасты писать-то и некому
Это нужно для замены общения, а не книжек. Лично я сюда захочу чисто пообщаться, а не за знаниями, но хотелось бы доску с более интересной тематикой. А в сцай какие-то пидоры вечно обсуждают эфир, гмо, и эволюционное обоснование волос на жопе.
Когда меня взяли в Люксофт, мне предложили выбор: либо идти работать в опенспейс с джавистами за 110 тысяч рублей в месяц, либо в отдельный кабинет за 70. Я выбрал кабинет. Моими соседями оказались два хаскеллиста: квант-аналитик и специалист по формальным методам. Квант-аналитика и формальные методы, что может быть бесполезнее в Люксофте? Эти парни редко разговаривали между собой, единственное, что их выдавало - книжки по теории категорий. Иногда я находил в них закладки с посланиями, которые хаскеллисты оставляли друг другу. Похоже они доказывали какую-то теорему, они называли её "центральной леммой". Я не мог понять деталей, но, судя по их записям, теорема поражала одновременно своей простотой и универсальностью. Они применяли её для поиска решений диофантовых уравнений, и, казалось, весьма продвинулись в этом деле. Один из них даже пообещал мне показать как она работает, когда они завершат доказательство, но этому не суждено было случиться. В один прекрасный день хаскеллисты просто исчезли, как будто испарились или сквозь землю провалились. Недоумевающие эйч-ары ходили по пустому кабинету, а от хаскеллистов ни осталось и следа, только книжки по теории категорий и две пары лакированных туфель напоминали об их присутсвии. Вместе с хаскеллистами пропали все их записи и один из системных блоков. Было бы глупо предположить, что кража недорогого компьютера и стала причиной их исчезновения, тем более было непонятно, зачем красть компьютер, если любую информацию можно просто передать через интернет, тем не менее отключенный монитор и провода на столе подчеркивали реальность случившегося. Столь неординарное исчезновение хаскеллистов разбудило во мне какие-то детективные наклонности и я решил непременно разобраться в случившемся.
я так понимаю речь идёт об зефире и об баранове, так?
Вот такой формат повествования тебя устраивает: http://pastebin.com/4evRNU2s
Если да, то могу продолжить. Жанр - детектив, пока не хочу сильно выёбываться, пусть будет что-то среднее.
Это конечно неплохо. Но почему здесь?
Бамп вопросу
Скатил в трешак, а начилось-то круто. Но так тоже круто. Скажи, в люксофте и правда балуются кокаином? Просто ты уже не первый, и даже не второй человек, мимолётом затрагивающий эту тему.
было на доу. паренек вообще не адекватный
Может они еще шлюх в офис заказывают?
Разумеется хаскель прост. Сам не использовал, но очевидно, что такая строго математизированная система не может быть сложной
http://pastebin.com/rGuykLti
При n=10000000 падает:
[CODE]
/usr/bin/time -f '%e %M' ./fib 10000000
Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize -RTS' to increase it.
Command exited with non-zero status 2
1.51 3024976
[/CODE]
Что не так с кодом? Куда ему 3Gb памяти?
У меня не работает. Выдает переполнение буффера.
GHC version 7.6.3
Можешь проверить сколько памяти твое решение потребляет?
Рор, я уже удалил все к чертовой бабушке, так что нормального теста не получится. Первый вариант жрет 1.2 ГБ (runhaskell), второй даже запускать не буду, ибо там быстрое возведение матрицы в степень - считай ничего.
Нагуглил решение:
[CODE]fibs' = unfoldr (\(!a,!b) -> Just (a,(b,(a+b) `mod` 10))) (0,1)[/CODE]
[CODE]time -f '%e %M' test 10000000
5
0.52 8768[/CODE]
Какая то ебаная магия.
http://stackoverflow.com/questions/6455898/how-to-avoid-stack-space-overflows
Абу опять все сломал.
Месяца два уже на харде лежит, все никак добраться не мог. Видимо время пришло.
Да, Deprecated: "Use Data.ByteString.Char8.putStrLn instead. (Functions that rely on ASCII encodings belong in Data.ByteString.Char8)" выводит utf8.
Лол. Неправильно выразился. Data.ByteString.Char8.putStrLn выводит Bs как utf8.
Я собственно решил костылем, в основе которго map chr, но хочется нормального метода.
Хрен тебя знает, тебе как на пикрелейтед что ли надо? Ну дык оно так и работает. Попробуй Data.ByteString.Char8.unpack в обычную строку, только обычный putStr будет ругаться если найдет символы с кодом (>127).
>The JavaScript problem is two-fold and can be described thus:
>1. JavaScript sucks.
>2. We need JavaScript.
Какой транслятор в js нормальный, кто-то пользовался вообще? Haste, GHCJS или JMacro?
Проще писать на жс и не выёбываться.
Потому что нет вакансий, очевидно же. Ну и нет юзабельного синтаксиса для циклов, переменных, записей, полиморфизма их и модулей (хотя сейчас уже есть экспериментальные модулеподменяемости), нет хорошей поддержки IDE уровня c#/java, сложная нативная модель компиляции и необходимость пересобирать мир в отдельном сендбоксе под каждый конкретный проект.
>нет юзабельного синтаксиса для циклов, переменных, записей, полиморфизма их и модулей
Толсто.
Потому что высокий порог входа.
Как в Хачкиле потрошить графы? Допустим я хочу замапить небольшую часть вк и смотреть, как в ней ходят, допустим, репосты. То есть БД не нужна, все в памяти поместится.
А почему нет?
ЧТОБЫ КНИЖКИ ПРО НЕГО ПИСАТЬ И ДЕБИЛАМ ПРОДАВАТЬ
Просто ты быдло и не понимаешь сути Haskell тредов.
Монада - это просто моноид в категории эндофункторов.
У меня в проекте для подобного fgl используется.
Собственно, это вроде единственный вариант. Но либа хорошая. Обычную проблему (невозможность прямого представления графа с циклами в виде АТД ввиду неиндуктивности графов) она обходит с помощью превращения графа в индуктивно определённую структуру.
Успешный Haskell-кун
Вообще-то там метки есть. Цикл между вершинами 'A' и 'B' можно представить как (1, 'A', 2), (2, 'B', 1). Отождествлять помечаемость с "индуктивностью" спорно, потому что последнее для графов - вообще мутный термин ( http://math.stackexchange.com/questions/140178/what-is-an-inductive-graph ). Например, для тех же целей сгодились бы вместо натуральных чисел, например, строки, или любая другая хуйня с Eq, а "индуктивность" - явно о чём-то большем.
> Вообще-то там метки есть.
И что?
> Цикл между вершинами 'A' и 'B' можно представить как (1, 'A', 2), (2, 'B', 1).
Это как раз и есть косвенное представление (или косвенная адресация), ты же узелок тут не завязываешь.
>Отождествлять помечаемость с "индуктивностью" спорно
Нет, ты не понял. Я про помечаемость ничего не говорил (и даже не знаю, что ты здесь имеешь в виду).
Если тебя смутило слово «индуктивная», то в этом же контексте вместо этого часто говорят «рекурсивная»: http://en.wikipedia.org/wiki/Recursive_data_type
> косвенная адресация
Это я и имел в виду под "помечаемостью".
> «индуктивная», то в этом же контексте вместо этого часто говорят «рекурсивная»
> обходит с помощью превращения графа в индуктивно определённую структуру
Рекурсивность тут тоже не при чём. Помечаемость заключается в возможности поместить V в тупл с L, который его адресует. Для этого достаточно находиться в категории с произведениями.
Кстати, в fgl "индуктивные графы" - это тайпкласс с несколькими реализациями. Как минимум тип предстваления графа в реализации на мутабельном массиве https://hackage.haskell.org/package/fgl-5.5.0.1/docs/src/Data-Graph-Inductive-Monad-IOArray.html вообще не является рекурсивным.
Когда Кметт будет спрашивать у тебя совет, а Олег Киселёв станет придумывать трюки с обобщениями твоих метапаттернов.
Есть риск, что заебёшься на элементарщине, а интересных хаскельных вещей так и не прочувствуешь.
Не так уж оно и сложно.
http://book.realworldhaskell.org/read/barcode-recognition.html
Хотя да, заебаться можно и на хэллоу ворде, было бы желание.
Там писать распознователь, как раз, с генератора и начинают.
> ип предстваления графа в реализации на мутабельном массиве
А это уже особенность реализации.
У-H-к
Я не из Мск, поэтому лучше расскажи, чем примерно придется заниматься и что требуется от соискателя. Насколько это возможно, конечно, чтобы не спалить контору.
Можно ли в хачкиле "сохранить" функцию на диск или переслать ее по сети, как объекты в яве?
Поддержки такого в самом языке нет, слишком рефлексия.
А вообще
http://stackoverflow.com/questions/6926151/serialization-of-functions-in-haskell
http://stackoverflow.com/questions/17785916/can-haskell-functions-be-serialized
http://kirov.hh.ru/vacancy/11512058
Он там математику в начальных классах преподавать будет?
Писать DSL-чики для автоматизации бизнес-процессов, придумывать зависимо-типизированные слои хранения данных.
>, что в откомпилированном виде существуют лишь примеры функций с конкретными типами
Не факт, специализация это лишь возможное представление (часто она действительно включается — можешь прочитать про прагмы GHC SPECIALIZE/INLINABLE).
А так каждому классу соответствует тип словариков методов, каждой реализации — конкретный такой словарик. При компиляции вместо классового контекста в функцию передаётся конкретная реализация этого словарика (параметризованная выбранным типом полиморфного аргумента).
При этом к простому вычислителю лямбда-исчисления (SSA) уже сегодня сводятся почти все новые компиляторы.
http://www.haskell.org/pipermail/haskell/2008-February/020177.html
>Скатил в трешак
Просто я - хуёвый писатель. Вот как мастера пишут: http://udaff.com/read/netlenka/proza/44435.html
Или вот еще http://pastebin.com/ph1Shg4y
А мне придётся еще 10 лет кормить вас говном, перед тем, как получится придумать что-нибудь забавное. Ну хуле делать, анонимный двач для того и нужен, чтобы тренироваться не стесняясь.
>Скажи, в люксофте и правда балуются кокаином?
Правда. Но об этом не распространяются. Сам не вижу в этом ничего особенно хорошего.
Алсо, можешь за классику угореть. Или за серебреный век. Классика охуенна именно в плане языка. Например, язык Достоевского насколько крут, что ты можешь придти в любой книжный магазин, открыть любую книжку Достоевского на любой странице, начать читать, и сразу получишь огромное эстетическое удовольствие именно от манеры его письма, тебе сразу захочется купить эту книгу. Но проблема классики в том, что им, подобно джавистам, платили за страницы. Поэтому там будет охуенный язык и стиль, вроде джаваёбских промышленных паттернов, но сотни абсолютно бессодержательных станиц, которые в любом случае заебут, несмотря на виртуозность исполнения в деталях. Я, например, прочитал Войну и Мир, но нихуя не помню каких-либо ярких персонажей или интересных сюжетных моментов. Я вообще не ебу о чем эта книга, вроде Толстой хотел что-то задвинуть про патриотизм, но получилась какая-то полная хуйня.
Серебряный век, интереснее в этом плане. Но там начинают сливать в качестве. Я читал Пастернака. И как-то не оче, даже стихи. Но вот нео уже гораздо лучше. Например "Записки юного врача" Булгакова интересно читать. И чем ближе к нашему веку, тем интереснее, от Варлама Шаламова почти невозможно оторваться. И самые гипнотизирующие ИМХО современные писатели. Помню Баяна Ширянова. Но они не глубоки совершенно. У современных писателей можно читать только первые две книги. Потому что в первой он сказал что-то новое, в во второй досказал то, что не высказал в первой. Далее идёт коммерция. У Баяна - Низший Пилотаж, остальное - хуйня. У Пелевина - поколение Пэ, можно еще Затворник и Шестипалый, и еще пару книг, если тебе нравится пиздёж Пелевина, но ты там не найдёшь ничего нового. У Венедикта - Москва - Петушки, у Стругатских - Град Обреченный, Гадкие Лебеди, Улитка на склоне, хуй знает.. Ну еще Сорокин - День опричника (Сахарный Кремль - хуйня для любителей сериалов), Захар Прилепин - вообще хуй знает что, поэтому я читаю удафф, вроде этого http://udaff.com/read/netlenka/proza/40584/, что и остальным советую.
Алсо, можешь за классику угореть. Или за серебреный век. Классика охуенна именно в плане языка. Например, язык Достоевского насколько крут, что ты можешь придти в любой книжный магазин, открыть любую книжку Достоевского на любой странице, начать читать, и сразу получишь огромное эстетическое удовольствие именно от манеры его письма, тебе сразу захочется купить эту книгу. Но проблема классики в том, что им, подобно джавистам, платили за страницы. Поэтому там будет охуенный язык и стиль, вроде джаваёбских промышленных паттернов, но сотни абсолютно бессодержательных станиц, которые в любом случае заебут, несмотря на виртуозность исполнения в деталях. Я, например, прочитал Войну и Мир, но нихуя не помню каких-либо ярких персонажей или интересных сюжетных моментов. Я вообще не ебу о чем эта книга, вроде Толстой хотел что-то задвинуть про патриотизм, но получилась какая-то полная хуйня.
Серебряный век, интереснее в этом плане. Но там начинают сливать в качестве. Я читал Пастернака. И как-то не оче, даже стихи. Но вот нео уже гораздо лучше. Например "Записки юного врача" Булгакова интересно читать. И чем ближе к нашему веку, тем интереснее, от Варлама Шаламова почти невозможно оторваться. И самые гипнотизирующие ИМХО современные писатели. Помню Баяна Ширянова. Но они не глубоки совершенно. У современных писателей можно читать только первые две книги. Потому что в первой он сказал что-то новое, в во второй досказал то, что не высказал в первой. Далее идёт коммерция. У Баяна - Низший Пилотаж, остальное - хуйня. У Пелевина - поколение Пэ, можно еще Затворник и Шестипалый, и еще пару книг, если тебе нравится пиздёж Пелевина, но ты там не найдёшь ничего нового. У Венедикта - Москва - Петушки, у Стругатских - Град Обреченный, Гадкие Лебеди, Улитка на склоне, хуй знает.. Ну еще Сорокин - День опричника (Сахарный Кремль - хуйня для любителей сериалов), Захар Прилепин - вообще хуй знает что, поэтому я читаю удафф, вроде этого http://udaff.com/read/netlenka/proza/40584/, что и остальным советую.
>Скажи, в люксофте и правда балуются кокаином?
Во всех крупных IT-компаниях упарываются всем что попадется. Это нормально, это часть рабочего процесса.
Удваиваю Шаламова.
У Достоевского бессодержательности как таковой и нет, все идет в нагнетание грязной тягучей атмосферы.
Хорошенько подготовься к собеседованию. У тебя уже должен быть опыт упарывания веществ кроме алкоголя, это раз, во-вторых на собеседование лучше приходить уже упоротым. Каким именно веществом – зависит от позиции. Кем собрался работать?
>До этого только кофе и сигареты
Не пройдешь. Этого даже для омича-джуниора недостаточно. Совсем без опыта не возьмут.
С ленивостью — легко. Делал ДП-шные алгоритмы для Курсеры на обычных иммутабельных Array с ленивой инициализацией.
Да потому что это ещё и неожиданно практичный язык для быстрого прототипирования. Я вот для работы экспериментировал с кое-какими геоданными. Набросал парсер на attoparsec, прикрутил выгрузку в Elasticsearch (попутно нашёл пару багов в bloodhound, правда), добавил визуализацию на gloss, потом экспорт в JSON для веба. Либы качаются и ставятся, комбинаторы комбинируются, почти всё компактно и без бойлерплейта. Когда понадобилось ускорить выгрузку — распараллелил, поменяв пару строчек. Представляю, сколько бы разгребал сегфолты и утечечки, если бы писал, как весь отдел, на крестах (или «object has no attribute» на динамикопараше), а тут сухо и комфортно, даже юнит-тесты не понадобились.
Отсутствие человеческой быдлоIDE, конечно, расстраивает, приходится сидеть в ебучем емаксе. Но ради удобного и изящного языка готов потерпеть.
Beginning Haskell: A project-based approach
Можно будет переманить джава быдло, которое сделает язык популярным и убьет его. Таков путь всех вещей.
http://eclipsefp.github.io/
https://github.com/Atsky/haskell-idea-plugin
https://www.fpcomplete.com/business/haskell-center/overview/
Есть знакомые, которые почти весь код пишут в виме (скалу правда, но раньше и хаскель там же хуячили).
Сам не хаскеллист нихуя, поэтому советовать ничего не буду, пробуй @ выбирай.
А то полезный код я уже весь написал, а как юзерам показать красиво не знаю.
нет, они байтоёбы, но в си хотя бы управление памятью есть в отличие от хаскалпараши
Есть фреймворк yesod для веба. Есть биндинги к гтк и кутям, а еще FRP надстройки к ним. Что именно тебе нужно - я не знаю, так что и мне лично писать больше смысла нет.
А это правда, что в хаскеле нет побитового отрицания? Как вы тогда выражаете побитовые nand, nor, xnor?
>Есть фреймворк yesod для веба.
Так в нем точно так же надо на жс-говне писать фроненд.
Мне надо web app или что-то аналогичное.
Там же вроде какой-то свой язык который потом в жс транслируется.
PureScript
Еклипс тормозное говно, не хотет. Плагин к идее вроде неплох, но мне так и не получилось научить его показывать тип выражения(может есть внешний инструмент для этого?).ФПкомплит не достаточно гибкий для моих потребностей.
>Еклипс тормозное говно, не хотет.
Зато языковой комбайн. Хотя кроме этого про него ничего хорошего сказать не могу, сам пользуюсь Idea.
>не получилось научить его показывать тип выражения
Все ждут твоего пулл-реквеста.
Достостоевщина доябывает. Но это лицо русской литературы, наша визитная карточка. За рубежом Россию ценят только из-за Достоевского, остальное им не особо интересно, если быть честными. Взять тот же фильм "Левиафан", который они оценили, но ведь это, сука, чистейшая достоевщина. И их клюквa: седой русский мафиози читает "Преступление и наказание" в кожаном кресле в своём рабочем кабинете (не помню, в каком фильме, но это архетип) - это им нравится. Чем еще представить русскую культуру, кроме как Достоевским? Некем, блядь, он ярок (в их понимании), а остальные не заслуживают их внимания на фоне собственных писателей. Что еще у нас было яркого в кинематографе? "Остров"? Ничуть не лучше. Тарковщина и достоевщина - вот наша культурная стезя. Плюс пара комедий тошнотворного качества для внутреннего потребления, которые не экспортируются по очевидным причинам. Поэтому тягучий, грязный депрессивный Достоевский - наше всё, никто не ценит нас в другом качестве, "Бесы", "Идиот", "Униженные и оскорблённые" это всё.
>Отсутствие человеческой быдлоIDE, конечно, расстраивает, приходится сидеть в ебучем емаксе.
Ну ёб твою мать, fpcomplete уже вторую версию ide выкатывает. С IDE в хаскелле всё хорошо, проблема в том, что он сам местами не столь хорош.
Это расширение, а не «с самого начала».
Кстати, яркий пример ООП аж в стандартной библиотеке – Control.Exception.
Vinyl шумный слишком, хотет записи как Elm`е.
fpeclipse довольно богат по возможностям по сравнению с доступными альтернативами
Нахуй все эти облачные говноide нужны, если туда даже библиотек накачать нельзя и доступиться к ресурсам на своём компьютере? Это гавно реально полная хуйня - сама задумка, в корне. Лучше бы все эти бабки вбросили в плагин для IDEA.
в атоме тоже норм поддержка хаскеля через плагин, правда сам атом глюковат
Я тут почитал "человеческий хаскелл", и вся эта тема с
ФП, иммутабельностью, чистыми функциями мне кажется несколько притянутой за уши в наш суровый реальный мир.
Ну то есть для математиков может оно и охуенно, доказанные алгоритмы реализовывать, а для реал лайф кодинга - нипонятно насколько это профитнее.
Но может быть это потому что мой мозг привык оперировать императивно-ООПшными категориями.
Для меня профитом было бы ускорение разработки софта - я пишу всякие вебкраулеры и последующую обработку числовых данных, никакой биг дата, производительность в принципе не роялит. Хочется писать более эффективно.
Даст ли мне это хаскелл или я буду создавать структуры и типы и нахуеверчивать монады дольше чем если бы я хуяк-хуяк и набыдлокодил на питончике?
>>392648
> Для меня профитом было бы ускорение разработки софта
> Даст ли мне это хаскелл
Конечно нет. Хаскель - это ещё медленнее и задроченнее, чем на жабе, причём если в оной только наяривание на robust scalable архитектуру, то здесь ещё и формализация всего (даже таких вещей, как распространение состояния) до самых оснований.
> или я буду создавать структуры и типы и нахуеверчивать монады дольше чем если бы я хуяк-хуяк и набыдлокодил на питончике?
Именно так. Хаскель любят люди, кому вообще неинтересно просто решить задачу, а интересно поформализовывать, потеоретизировать, подумать о структуре вещей. Конечно, в результате нередко получаются решения уровня качества совершенно несоизмеримого с тем, во что могут прикладные недоязычки, но на это уходит в 100500 раз больше времени, а использовать их все в прикладном коде всерьёз получится только когда системы типов прикладных недоязычков догонят текущую хаскеля в некоторых аспектах. Сейчас такое возможно только иногда со Scala и C++.
короче, пускай скалу изучает, годнота и годится на всё, на что годится джява™
Скорее, это LINQ – что-то отдалённо похожее на Haskell.
Ну вот всякие Зефировы утверждают, что через годик практики можно писать на хаскелле с той же скоростью, что и на императивных язычках.
Есть тут многоопытные хаскеллисты, способные сие подтвердить/опровергнуть?
DRAW CIRCLE ON myCanvas CENTER(100, 100) RADIUS 150
DRAW RECTANGLE ON myCanvas FROM (5, 5) WIDTH 400 HEIGHT 300
INSERT INTO TableName IN myConn VALUES (a, b, c)
OPEN FILE "Data.txt" FOR READ AS fileVar
Понятно. Говно этот ваш Хаскель, буду учить F# и Scala.
В хаскеле такие eDSL обычно говнякают на комбинаторах. Например, http://projects.haskell.org/diagrams/doc/quickstart.html
Если недостаточно — см. Template Haskell и квазицитирование всякое.
Потому что изменять AST хаскеля нельзя, оно фиксированное. Нельзя добавить кейворд там, или новый декларатор, или ещё что. Можно оживлять/строить обычное AST хаскель кода. А сплайсинг квазицитат - это и есть макроэкспаншн.
https://hackage.haskell.org/package/semigroups-0.15.2/docs/Data-List-NonEmpty.html#t:NonEmpty
https://hackage.haskell.org/package/comonad-4.2.2/docs/Control-Comonad.html
В смысле «скомбинировать набор функций»? Пример, что должно получиться, можно?
floor(0,95) = 0, с round и ceil не путай
Я даже упрощу: есть [f, f ... f], где f = \x -> [x].
ghci нормально жрет выражения вида (f .)_{n раз} f $ some_list, введенные вручную, но написать фолд, чтобы получить то же самое, но для списка переменной длины, у меня не получается.
>>393092 >>393093
А вот человек предложил комонады, но не дал и намека на то, что же с ними делать.
допустим есть функция
g n = [f,f..f] (список длины n с твоей функцией)
какой у неё тип?
её тип зависит от n?
> какой у неё тип?
$ let f = undefined :: x -> [x]
$ :t f
f :: a -> [a]
$ :t (f . f)
(f . f) :: a -> [[a]]
$ :t (f . f . f)
(f . f . f) :: a -> [[[a]]]
Ну ты понял..
Наверное ты хотел что-то вроде:
(flip $ foldr ( =<< )) [f,f,...,f] some_list
Успешно работать с хаскелем = твои статьи, формализующие программированиепроблемки категорными абстракциями с примерами на хаскеле, принимают в элитные рецензируемые научные журналы. Примеры:
http://homepages.inf.ed.ac.uk/wadler/papers/constraints/constraints.pdf
http://www.cs.nott.ac.uk/~txa/publ/qio.pdf
Лучше бы вместо пейперов они библиотеки накатали. А то доказали@формализовали, а толку с гулькин нос, никто этим не пользуется.
"Лучше" понятие контекстуальное. Хаскель более удобен, чем agda и coq, но менее удобен, чем большинство мейнстримных быдлоязыков. Только вот на последних это всё выразить вообще не получится.
С нормальным автокомплитом, подсветкой, кликабельной навигацией по референсам, отладчиком с нащёлкивемой мышкой брекпоинтами (ловить IO форс вычисления Lazy и видеть скоуп биндов в монадах). Хотеть всё как в vs + resharper.
Или не в этой жизни?
И что там из этого списка есть? Горе-подсветка и вечно-отваливающийся автокомплит? Нахера ты это говно сюда притащил?
Причём тут ява, блядь. Лазить в hoogle (то и дело падающий) на каждый чих в поисках функций?
а мир ещё не пересобрать руками?
Я думаю тут нужен какой-то меценат, который вложит пару лямов баксов в проект. После этого к хачкелю потянутся люди и он сможет выстрелить.
>Я думаю тут нужен какой-то инвестор, которому нужно в диком масштабе клепать EDSLчики и который поэтому вложит хоть сколько-то тысяч баксов в проект. После этого к хачкелю потянутся люди и он сможет выстрелить.
Если подключишь существующие инструменты лексического анализа, то свой интерпретатор си-подобного языка в 40 строк сделаешь. Если в теории шаришь, ясен пень.
>существующие инструменты лексического анализа
хотелось бы как раз написать свои инструменты лексического анализа, вроде лекса и яка. Насколько хорош для этого хаскель? Я спросил в общем треде, но как-то там мне не сильно хотят отвечать.
Ты бы поконкретнее спрашивал. Лексический и синтаксический анализ - немного разные темы. Как правило, лексика ограничивается регулярными языками - самыми простыми в иерархии Хомского - для распознавания которых достаточно конечных автоматов, а вот синтаксис обычно как минимум контекстно-свободный.
http://www.cs.odu.edu/~toida/nerzic/390teched/regular/reg-lang/non-regularity.html
Ну и, конечно же, область применения имеет значение. Если тебе надо работать с лексикой ЯП, вероятнее всего, на выходе ты хочешь получать всякие токены и, следовательно, можешь использовать существующие решения для описания ЯП-лексеров, а вот если тебе нужно нечто более общее, вроде анализа лексики естественных языков, тебе, вероятно, на выходе захочется иметь совсем другие вещи. В этом случае можешь использовать библиотеки описания и манипулирования конечными автоматами.
с языками программирования буду работать. Скорее всего буду писать именно генератор парсеров. Будем считать, что у меня уже есть поток токенов на вход. Интересно узнать, насколько хаскель может в парсинг, есть ли внем что-то, позволяющее упростить эту процедуру?
я бред написал. СИнтаксического анализа, а не лексического. ПРошу прощения
Pattern matching, guards. По-моему всё отлично. Даже короче и яснее должно получиться.
Если ты любитель композабельности и освоишь функторы-аппликативы-монадки ( достаточно будет прочитать http://www.haskell.org/haskellwiki/Typeclassopedia ), тебе понравится подход комбинАторного парсинга: http://en.wikipedia.org/wiki/Parser_combinator
Главные библиотеки:
https://hackage.haskell.org/package/parsec
https://hackage.haskell.org/package/attoparsec (менее гибкая, зато охуенно скоростная)
https://hackage.haskell.org/package/trifecta (по идее, самая гибкая, и наилучшие сообщения о ошибках при парсинге)
Почему-то сейчас не могу навскидку найти хороший туториал - все зашкворные. Проблема в том, что они используют монадический парсинг вместо аппликативного в местах, где последнего было бы достаточно, что, кроме того, что противоречит бритве Оккама, ещё и делает код более многословным. В этой статье эта проблема описана, но она предполагает некоторое знакомство с парсеком: http://robots.thoughtbot.com/applicative-options-parsing-in-haskell
Думаю, лучше всего читать по ней и если что неясно, лезть в другие туториалы, а потом возвращаться и делать как тут.
все уже написали до тебя
https://hackage.haskell.org/package/happy
https://hackage.haskell.org/package/alex
Спасибо, обязательно ознакомлюсь.
Он немного прозрачный. Криповато получилось.
C 15-го числа.
красивый
>но не каждый работодатель будет оплачивать потраченное на неё время
лол
удачи тебе в поисках работы
> но не каждый работодатель будет оплачивать потраченное на неё время.
Я бы даже уточнил: ни один. Если тебе очень повезёт, ты когда-нибудь сможешь найти с ним работу, но там нужно будет сразу всё знать и уметь, а не "согласен изучать".
То, что хочет работодатель != то, что получает работодатель
1. Чем рисовать апериодические замещения плоскости?
2. Обычно этническую поеботину рисуют не особо разумные бабы, так что их наверное можно аппроксимировать конечными автоматами. Посоветуй литературу про конечные детерминированные и недетерминированные автоматы, чтобы понять, насколько я (не)прав (найти я могу сколько угодно литературы - но какая нормальная?)
3. Пригодны ли для п. 1, 2 diagrams, ведь объектов даже на среднего размера рисунке дохуища.
4. Насколько геморно может оказаться прилепить гуевину для редактирования таких рисунков - или об этом не стоит и думать?
Я имел в виду реализацию строго в рамках haskell, так что нет. Тем более что сюда, бывает, заглядывают умники, более-менее разбирающиеся в нем.
Ну и что? Весь этот тред тоже должен быть в /cs/. К оному не относится только такое программирование на хаскеле, в котором задачки решаются и гостевухи пишутся уже общеизвестными методами.
>FP Complete is looking to expand its Haskell development team. We’re looking for a Haskeller with a strong background in web UI development.
>This is a telecommute position: you can work from home or wherever you choose, with little or no travel.
>Skills required:
>Strong Haskell coding skills.
>Experience with creating HTML/CSS/Javascript web applications (fat clients a plus).
>Ideally: experience with both Yesod and Fay for server and client side coding, respectively. (Perk: you’ll get a chance to work with the authors of both tools.)
Пошли работать, борщехлёбы
http://arhivach.reformal.ru/proj/?ia=707078
>>395555
Бля, я не понял, вы про хачкель? На Rust можно писать быстрый и безопасный код продуктивнее хачкеля, поэтому, например, вангую что со стабилизацией синтаксиса его могут применить где-нибудь в хуяндексе - го там уже используют. Совсем уж оффтоп, но тот же D используют в фейкбуке - к вопросу о спросе на экзотику.
ну так и на хаскеле и на скале и на f# вакансии есть, только тебе просто так туда не попасть
Вот хз, хз.
https://groups.google.com/forum/#!topic/golang-nuts/NSPcEqhe-8I
У него пока даже синтаксис и архитектура толком не устоялись, основных оптимизаций ещё не было. В будущем должен быть не медленнее c++.
>incorrect indentation
Может это, ты не думал? Я не хачкелист, но сомневаюсь что продолжать выражение manageHook' = ... на другой строке с такой же индентацией корректно.
охлол хачеков унижает даже собственный интерпретатор
Я помню 2 часа ебался, с internal compiler error в гхц 7.4.1, считай, что тебе ещё повезло, лел
Бгг
А то я похоже очень туп.
PS желательно чтобы пример можно было скомпилироватью.
Хуясно. Там не матан, а абстрактная алгебра и теория категорий.
Тем, что у меня нет ghci. И компилятора нету. А тип надо узнать.
Или через TemplateHaskell можно сделать.
Вот вам и хачкель, ёптыть, вот вам и матан, нахуй.
А мой друг на коболе зарабатывает нисколько не меньше. И что теперь?
Это ж не повод писать только на недоязычках.
Haskell как язык выучить достаточно легко. Тем не менее, нотация его достаточно гибкая, чтобы выражать в ней многие конструкции абстрактной алгебры. Ей один человек целиком овладеть не может - слишком дохуя всего математики придумали со времён Кантора, да и не нужно это. А вот оставаться в тренде её аспектов, используемых в популярных библиотеках, можно и нужно.
Скорее, что-то вроде этого http://ideone.com/mEls6t
>>398518
Так и придётся. А потом писать рядом и пытаться сконпелировать.
А как вы ребята ICMP пакеты отправляете, неужели каждый пишет свою версию ping?
Ты б ещё на брэйнфаке написал, наркоман.
Родина ему перл дала, а он: Не хочу перл, хочу жрать говно.
> Хаскелюги, а что скажете за Rust?
Выглядит как очередной алгол68, думаю таковым и является. Значит, разговаривать нет смысла: старые фичи напихали в алгол, смешали, взболтали и выдают за дохуя инновацию.
Для копипаст и троллинга на двачах.
Сублайм без плагинов.
В фин. секторе активно пользуются.
Даже мне предлагали позицию, но я то знаю этот ваш хачкель чуть больше чем нухуя.
а разве в алголе были lifetimes выражаемые через типы?
Ну разве это не охуительно?
http://pastebin.com/8EDsDXG4
Кто бы сомневался. Это ж первое задание. Каким может быть код после первого задания если не нубским?
Кстати, гуру, запостите, пожалуйста своё решение задачки. Хочу посмотреть на код мастеров.
Собирай свои монадки и проваливай.
Хуёвый там синтаксис, этот обратный слеш - полное говно, некрасиво. Плюс хорошо бы для них иметь автоматическую аппликацию (возможность не писать иногда доллар), как в раби когда они идут последним аргументом.
>хорошо бы для них иметь автоматическую аппликацию (возможность не писать иногда доллар), как в раби когда они идут последним аргументом.
ну накидай синтаксис, как это должно выглядеть
>Выглядит как очередной алгол68, думаю таковым и является.
Не думай, у тебя плохо получается.
Понимаю, что вопрос глупый. Но просьба сильно не пинать.
мимогумманитарий
Продолжаю свои изыскания.
я понимаю, что perl или может bash больше подходит, но ведь надо ж с чего то начинать
Итак, я выкатил новую версию - "http://pastebin.com/ScEbTvDT . Что она делает?" - спросите Вы. А делает она много чего:
1. Берет список картинок с сервера
2. Проверяет доступность камер
3. Если камера доступна, то проверяем изминилась ли картинка с прошлого запуска.
4. Если не изменилась, то перезагружаем камеру.
Ну на самом деле, я думаю что она так работает, есть подозрение что она творит какуюто херню А что думаете Вы?
>обратный слеш
https://github.com/enomsg/vim-haskellConcealPlus
https://github.com/i-tu/Hasklig
Может пригодится.
k <- getKeyEx w True
--->if k == ' '
------->then closeWindow w
------->else spaceClose w
Оно закрывает окошко по нажатию пробела. Я хотел бы сделать так, чтоб оно закрывалось при нажатии Esc, но у меня ничего не получается. Я пробовал заменять условие на k == '\0x1b' и на k == (fromEnum 0x1b)[b/], но эти варианты не сработали, окошко закрываться отказывается. Помогите, пожалуйста, подскажите, как сделать так, чтоб окошко закрывалось при нажатии эскейпа.
Госпожа авансом.
Нет, не работает, окошко не закрывается.
This paste has been removed!
Вангую что проблема не в твоем коде, а в SOE, который для чего-то выходящего за границы заданий в книжке не предназначен. Посмтори исходники SOE, может можно легко поправить.
Готов опровергнуть. Писать на Хаскеле заметно дольше. Но результат заметно структурированнее и чище. Это заметно по хаскельлибам - пользоваться ими гораздо приятнее, чем любым императивным говном. Они понятнее, структурированнее, логичнее, проще интегрируются, в них меньше неожиданностей и ебли со всякими скрытыми нюансами. Но для создания такой библиотеки требуется очень много усилий. Я думаю, преимущества Хаскеля заметны на крупных проектах, когда императивная лапша превращается в рассыпуху логики по сотням классов с кучей багов, и на простейшие модификации уходит уйма времени, просто протому, что очень сложно разобраться в таком объёме говнокода. Большинство саксесс-стори, которые я слышал про Хаскель, сводились к тому, что люди писал-писали на каком-то императивном говне, дохуя написали, сами охуели от сложности поддержки написанного, поэтому написали на Хаскеле DSL, после чего жить им стало лучше.
Взлетит? Нужно такое?
>мне хочется накатать desktop environment
Похвальное желание.
>для швабодки
Ой, ещё один мертворожденный велосипед. Сдохни, сука ебаная.
>xfce
А это что ли не закос под виндовс 95? Кто им в 2014 пользуется кроме великовозрастных маразматиков? Или у тебя компьютер офисный 2005 года выпуска?
>В сиговно лезть совсем не хочется, попробовал-проблевался уже, поэтому хаскель.
Ой, только два языка программирования знает. И выбрал один из самых уёбашных.
>Основа gtk
Ой иди на хуй.
>максимальный упор на скорость с достаточно простой визуальной составляющей
Ой иди на хуй, иди на хуй, минималист.
>обычное меню запуска эпохи гнума2, +свои нововведения допиливающие гнум2/xfce до идеала (множество полезных десктопных мелких фич вместо криативнасти и адаптации под планшеты)
Я даже не знаю как комментировать этот бред.
Оконных менеджеров под прыщеось как говна. Свой desktop environment ты писать заебешься, да и зачем это нужно, если можно сложить отдельные компоненты во что захочешь.
>но его никто не развивает совсем. Да и кривости есть.
А чо там нужно развивать? Какие кривости?
>упор на скорость с достаточно простой визуальной составляющей, обычное меню запуска эпохи гнума2
90% оконных менеджеров в репо. Просто поставь openbox.
>свои нововведения допиливающие гнум2/xfce до идеала
>множество полезных десктопных мелких фич
Ты пока ни одного примера не привел.
Биндинг есть же. Или ты мне предлагаешь за одно и ведро ОСи переписать?
>можно сложить отдельные компоненты во что захочешь
Да, в целом хочу обойтись меньшей кровью пока что и не пилить весь софт для всего.
>Какие кривости?
Выглядит как топорное говно. gtk2. Компоненты панели размещаются как говно. Конфиги не могут нормально становиться общими в /etc.
>90% оконных менеджеров в репо
Там в основном всякие фреймовые менеджеры, якобы что-то там ускоряющие, на деле засирающие мозг ещё 500 сочетаний клавиш. Остальное - что нужно обрезано, что не нужно добавлено в конских количествах.
>фичи
1. вяленый (ну правда, оче хочется). Соответственно это означает все визуальные вкусности и приятности opengl. Нормальное переключение пользователей, нормальная заставка.
2. сеточный alt+tab. Часто используемые приложения ближе к центру, выбор всеми 4 стрелками.
3. произвольный layout в панелях задач, с разбиением на ячейки. Например часы могут занимать в разных вариациях 2x2, 4x2, 8x5. Произвольная форма панели. Нормальный набор виджетов, каждый в нескольких вариациях размера и вида.
4. нормальный автофит окон на стандартные области в полэкрана/четверть экрана (в зависимости от размера монитора набор областей разный). без распидорашивания позиций и размеров.
5. скрывающаяся панель без уёбищного торчащего бортика.
6. обычный виндовый буфер обмена по ctrl+c ctrl+v
7. допиленые kiosk и xfconf. Для ограничения и настройки всего что связано с DE, а не пары элементов.
Скорее такая работа над ошибками в xfce с добавлением нормальной композитности.
Во-первых забудь это ебучее слово "минималистично", "минимализм". Минимализм это направление в искусстве, им пользуются художники, дизайнеры, музыканты, в общем те, кто производит контент, который нужно смотреть глазами или слушать ушами, но не интерактивный. Это понятие не применимо для разработки софта. Максимум что может означать минимализм в софте — это отсутствие сложных декораций в UI. Всё. В этом плане минималистично что угодно кроме, например, пикрелейтед. Нутыпонел.
Обычно про софт говорят что он "минималистичный", если он:
1. Не реализует весь необходимый функционал.
2. Не продуман, компоненты плохо интегрированы, интерфейс требует долгого изучения.
3. В целом недоделан и кал.
Если целевая аудитория — обыватели, то кусок говна обзывают "минималистичным". Если более-менее искушенные, то говорят что это "KISS". Если ЦА — прыщебляди, то гордо объявляется, что поделка выполнена "в духе unix-way".
Хорошо. Быстрый, не тормозной. Машина и правда уже старовата, бубунта была в своё время снесена именно из-за страшных лагов и потребления памяти/процессора. Мне не хочется тратить ресурсы даже самого мощного пека на неизвестно что.
>Обычно про софт говорят что он "минималистичный", если он:
>1. Не реализует весь необходимый функционал.
>2. Не продуман, компоненты плохо интегрированы, интерфейс требует долгого изучения.
>3. В целом недоделан и кал.
иди нахуй, еблан
минимализм - это хорошо: лишняя хуйня не нужна, лишняя сложность не нужна, лишняя общность не нужна
и вообще всё должно быть как можно проще, но не проще
так а ты пробовал другие wm перед тем как делать свой? я слышал blackbox неплох
и потом имей в виду - вся хуйня kde и gnome тебе потребуется для запуска приложений под них
>1. вяленый
чё за вяленый?
>нормальная заставка.
нескучные обои
>2. сеточный alt+tab. Часто используемые приложения ближе к центру, выбор всеми 4 стрелками.
хуита, фишка alt+tab в быстроте, а ты со своим "часто используемые" соснёшь хуйца - я гарантирую это
>3. произвольный layout в панелях задач, с разбиением на ячейки. Например часы могут занимать в разных вариациях 2x2, 4x2, 8x5. Произвольная форма панели. Нормальный набор виджетов, каждый в нескольких вариациях размера и вида.
виджеты не нужны
>4. нормальный автофит окон на стандартные области в полэкрана/четверть экрана (в зависимости от размера монитора набор областей разный). без распидорашивания позиций и размеров.
это всё лишнее - хватит деления экрана на два по горизонтали
>5. скрывающаяся панель без уёбищного торчащего бортика.
это чо ваще?
>6. обычный виндовый буфер обмена по ctrl+c ctrl+v
тут соснёшь хуйцов со своим хакселем
>7. допиленые kiosk и xfconf. Для ограничения и настройки всего что связано с DE, а не пары элементов.
аналогично
>>407149
>другие wm
>blackbox
>чё за вяленый?
>нескучные обои
Wayland. Заставка это не картинка, а скринсейвер и блокировка сессии с требованием пароля. Проблема в первую очередь в иксах, с ними нельзя сделать хорошо и бесшовно. Останется та же моча с ctrl alt F. Хочется красиво и аккуратно. С вейлендом есть только акулы gnome и kde, облегчённых DE не завезли.
>фишка alt+tab в быстроте
Да. Только обычно тебе приходится листать по списку в 2х направлениях, а здесь по сетке в 4х.
>часто используемые
Нахуй не нужно.
>виджеты не нужны
Не скажи. Очень нужны. Но я предпочитаю их держать в скрытой панели, или хорошо было бы вынести на сам валпепер, предварительно отрезав им кликабельность. Другое дело, что разукрашенности не нужны, согласен.
>хватит деления экрана на два по горизонтали
По вертикали тоже удобно. Но я хочу добавить свободную блочность: настрой как тебе нравится, примерно как в блендере это делается, split+join.
>соснёшь хуйцов со своим хакселем
Что помешает-то?
Я тебя не понимаю, куда это x1b вставлять?
>Not in scope: `x1b'
Без нуля спереди хаскель считает, что это имя.
> Syntax error on 'x1b'
В одинарных кавычках тоже не принимает.
http://pastebin.com/mUX841Au
Я бы тебе скринов наделал, но мне лень.
Попробуй SOE обновить что ли.
Я нашел значение добавав BS.writeFile '1.txt' k, после чего проверил 1.txt hexdump'om. Стоит добавить, что у меня Linux. Возожно дело в этом.
Попробуй моим способом, судя по коду там не нажатие клавиши детектится, а введенный символ. Поэтому возможно дело в кодировке.
Извиняюсь за нубский вопрос, но я не понимаю, как преобразовать k к нужному символу, чтоб код нажатой клавиши там был.
Так не работает "BS.writeFile "1.txt" k":
Couldn't match expected type `BS.ByteString'
with actual type `Char'
In the second argument of `BS.writeFile', namely `k'
In a stmt of a 'do' block: BS.writeFile "1.txt" k
И так не работает " BS.writeFile "1.txt" $ fromEnum k":
Couldn't match expected type `BS.ByteString' with actual type `Int'
In the second argument of `($)', namely `fromEnum k'
In a stmt of a 'do' block: BS.writeFile "1.txt" $ fromEnum k
import Data.ByteString.Char8 as BS
spaceClose w = do
k ← getKey w
BS.writeFile "1.txt" $ BS.singleton k
...
Внезапно!
Впрочем я сделал сравнение с нулём, и это тоже не помогло. Ладно, пофигу; пока изучаю книгу, мне и пробела хватит, а потом буду уже полноценные библиотеки использовать.
Сейчас там не фракталы, а цветные круги, следующее упражнение из книги.
Запускаю в интерактивном режиме:
ghci -iSOE/src
затем загружаю файл:
:load qwert
запускаю:
main
Кстати, у меня изначально не работала функция getKey (даже с пробелом), следуя советам из гугла я нашёл модуль, в котором была getKeyEx, и добавил её в список экспортируемых функций.
>лишняя хуйня не нужна, лишняя сложность не нужна, лишняя общность не нужна
У нормального человека бывает и лишняя, а бывает и не лишняя. У шкальника-максималиста всё всегда не нужно.
>всё должно быть как можно проще, но не проще
Так проще или не проще? Посиди в ридонли, пока не подрастешь и научишься ясно излагать свои мысли.
Припиздячь хоть как-то хмонад к вяленому, склепай пару утилит для интеграции приложений, автоконфигурирования или еще какой-нибудь похожей ДЕ-поеботы, чтобы потом это можно было бы использовать не только в твоих наколенных поделках - и будет самое заебись.
>им пользуются художники, дизайнеры
Будто проектирование UI не считается дизайном. Статьи в википедии про это нет, потому что сложные пользовательские интерфейсы появились не так давно. Само понятие, при этом, прекрасно описывает суть.
>Обычно про интерфейс говорят что он "минималистичный", если он:
>1. Реализует только необходимый функционал.
>2. Хорошо продуман, компоненты надежно интегрированы, не требует изучения.
Можно и слева направо:
[code]
import Control.Arrow
getContents >>= (lines >>> map read >>> sum >>> print)
[/code]
Напиши какой-то список
Напиши Вульфенштайн 3Д как Кармак.
2. написать левую свёртку используя только правую свёртку
гугл низя!
1)
записываем foldr через foldMap
fldr f z xs = appEndo (foldMap (Endo . f) xs) z
fldr :: Foldable t => (a1 -> a -> a) -> a -> t a1 -> a
преобразуем моноид в дуальный:
fldl f z xs = appEndo (getDual (foldMap (Dual . Endo . f) xs)) z
fldl :: Foldable t => (a1 -> a -> a) -> a -> t a1 -> a
сигнатура неправильня - флипанем f
fldl f z xs = appEndo (getDual (foldMap (Dual . Endo . flip f) xs)) z
fldl :: Foldable t => (a -> a1 -> a) -> a -> t a1 -> a
заменяем foldMap на foldr
fldl f z xs = appEndo (getDual (Prelude.foldr (mappend . Dual . Endo . flip f) mempty xs)) z
fldl :: (a -> a1 -> a) -> a -> [a1] -> a
упрощаем
fldl f z xs = (Prelude.foldr (flip (.) . flip f) id xs) z
готово
2) это невозможно
> это невозможно
лиуоул
http://ideone.com/8VZuCy
теперь давайте напишем инстанс монады для массива
ща поправлю
Втупую запилить окружение для сборки с нужной версией нельзя?
Попробуй чисто для лулзов запилить симлинк от библиотеки пятой версии к шестой.
Почитай чейнджлог - если все кардинально переделали, вряд ли получится заменить "по-горячему".
Оцените мой фибонач.
можно ещё в начале исходика в прагме
Всё нормально со скоростью, но есть свои тонкости. И по памяти, и по цпу.
Не годится же
http://ivanmiljenovic.wordpress.com/2010/03/15/repeat-after-me-cabal-is-not-a-package-manager/
Я даже чужое поделие с гитхаба охуел с этим кабалом собирать.
Поделиепроблемы. Ваня пусть идёт нахуй. Ты тоже.
Порватки, если уж вы собрались разносить в говно императивных чепушей, то хотя бы строго излагайте свои мысли и разбивайте текст на абзацы. Чтобы вас хотя бы не банили за "пздц бред пишеш))))".
Динамическая типизация не противоречит ФП и меньше всего ограничивает разработчика → лучше всего подходит для создания прототипов.
Статическая типизированные языки никогда не будут востребованы более того, как они востребованы сейчас.
Динамическая типизация менее выразительна, потому что в ней есть только рантаймовые теги. В статике можно диспатчиться и по статическим тегам в компайл-тайме, и по динамическим в рантайме, а значит в статике выразимо большее количество программ. Следовательно, статическая типизация даёт разработчику больше свобод: во-первых, ему не надо вечно следить, не подкрадывается ли к анусу дилда, во-вторых, он может написать больше разных программ, и это всё не говоря уже об абстракции и прочих профитах типизации. Из этого всего следует, что статическая типизация лучше подходит для всего - и для прототипов в том числе.
как обидно-то. зачем ты так?
http://dou.ua/lenta/articles/language-rating-jan-2014/?from=doufp
Наверное, все хаскелеебы поехали пердолиться в АТО.
в украине щас вобще неспокойно..
Кризис. Мамкам больше не на что готовить борщ вот они все и подохли.
Почему для хачкеля не указан уровень удовлетворенности?
ЧСХ первые 10 ЯП из граф "на чём пишете" и "на чём хотели бы писать" не отличаются. Выучил джяву, работаю на джяве, люблю джяву, умру с джявой...Синдром утёнка какой-то.
Джава лучше всех, очевидно же. Монадки в реальном программировании нахуй не нужны.
Джава - как платформа - позволяет быстро и решительно решать задачи. То, что джавакод "недостаточно выразителен" по мнению отдельных энтузиастов ФП, не интересно никому кроме энтузиастов ФП.
«Джава как платформа» ≠ «джава как язык».
Я писал про язык. Платформу можно использовать и с другими языками (Clojure, например, ну или этот ваш Scala).
А я имею ввиду язык (и ИДЕ для него) как часть платформы. Джава-язык позволяет фигачить код с огромной скоростью после минимального обучения. Всякие скалы-кложи времени на обучение потребуют больше, а профита кроме "выразительности кода" не дадут.
>Джава - как платформа - позволяет быстро и решительно решать задачи.
Быстро решительно съебал отсюда, толстяк.
>фигачить код с огромной скоростью
а ещё быстрее говно на выброс можно на питоне или пхп фигачить.
Это копия, сохраненная 25 января 2015 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.