кана
так значение + методы есть объект
Зигохистоморфный
комонада объект коалгебры объект коиндукция моделирует объекты
Alexander
так значение + методы есть объект
У тебя нет этого значения инкапсулированного с методами, оно пропускается через стетйт-монадический код.
Alexander
Ну все, я умываю руки, вы пытаетесь аргументровать про ООП, привлекая концепции, которые имеют такое же название, но не являются концепциями из ооп
кана
стой
кана
смотри
кана
у нас есть значение некоторое
Alexander
Я ушел
кана
ну ладно. в любом случае, я вижу некоторое значение, которое уже по сути есть состояние. Есть методы для работы с этим значением, которые могут вернуть новое значение (обновляют состояние) работать со значением БЕЗ методов мы не можем, оно спрятано
кана
class Shape s where double :: s -> s area :: s -> Float data Rect = Rect { width :: Float, height :: Float } instance Shape Rect where double (Rect w h) = Rect (w * 2) (h * 2) -- x4 lol area (Rect w h) = w * h f :: Shape s => s -> IO () f shape = do let shape' = double shape print $ area shape' main :: IO () main = f (Rect 10 20)
Kirill
Так что этот чувак опоздал
Ты в 2014-м исследовал, а этот чувак в 2013-м со своими лекциями опоздал? Вот это поворот...
Alexander
Если он раньше это делал, ну окей
Alexander
Сделаем вид, что сегодня луна неправильно светит и разойдемся.
кана
я кстати понял, что по сути в hinteractive реализован динамически типизированный язык
Alexander
я кстати понял, что по сути в hinteractive реализован динамически типизированный язык
В некотором смысле да. Но все-таки, там не динамический язык, а два слоя: типизированный и безтиповый. На типизированном уровне я могу получить доступ к объектам любого сериализуемого типа (причем, если нужно, я сделаю это типо-безопасно, с помощью того же подхода, который в stm_free применил), а на безтиповом уровне я храню все состояние игры в JSON и потому могу его оперативно складывать в файл, если нужно.
A64m
ну вот тут FT прямо сравнивается и с ооп и с типичным функциональным подходом, когда функция-"интерпретатор" ПМ-ом интерпретирует "язык"-АлгТД https://oleksandrmanzyuk.wordpress.com/2014/06/18/from-object-algebras-to-finally-tagless-interpreters-2/
A64m
так что это не ооп, очевидно
Alexander
Спасибо, почитаю
Anonymous
простите, с чего лучше начать учить хаскель - с теории категорий или с ТРИЗ?
Можно с одного из популярных учебников по Хаскелю или курса на степике. ТК или ТРИЗ - слишком долгий путь к Хаскелю
Алексей ayaye :)
я читал книжки, потом пошел курс на степике. курс хорош тем, что заставляет делать руками. обратную связь дает. а книжку прочитал - непонятно, понял или нет )
Leonid 🦇
OOP это IORef
Alex
Джентельмены, помогите: у меня есть строки вида табы слово запятая новаялиния
Alex
Скажите пожалуйста, как это распарсить с помощью парсека и получить список слов
М
Разделить по запятой, убрать табы?
Alex
Листаю доку, но не могу понять как добавить слово
М
Зачем там парсек
Alex
Это только подзадача
Alexander
тут нужно ответить "что такое слово"
Alexander
например если что угодно, где нету пробела то слово это word = takeWhile (not . isSpace)
Anonymous
Лучше break
Dmitry
Джентельмены, помогите: у меня есть строки вида табы слово запятая новаялиния
парсер sepBy - распарсить по табам. но наверняка потребуется поддерживать строковые литералы в кавычках и квотации
Alex
например если что угодно, где нету пробела то слово это word = takeWhile (not . isSpace)
Да, это подходит но очень хочется попрактивоться именно с parsec
Dmitry
что приведет нас к полноценному парсингу строковых литералов и как следствие к полноценнум парсеру csv, которых уже есть пара штук
Alexander
тогда разбор будет: word `sepBy1` tab <* comma <* endOfLine
Alexander
вот я тоже боюсь что там tsv или csv
Dmitry
это всегда так
Dmitry
без исключений.
Alex
Да, оно похоже, но на самом деле там C++ енум
Dmitry
парсер строковых литералов я таскаю из проекта в проект, периодически теряю и пишу заново
Alexander
в общем я комбинаторы в документации каждый раз смотрю, но в целом структура будет как в коде выше
Dmitry
может, на хакадже есть?
Alex
А что значит <* ?
Dmitry
Alex
Спасибо
Alexander
из сообщения выше
Ilya
из сообщения выше
непонятно, в сообщении выше не парсек же
Alexander
это к автору вопрос на самом деле, что такое слово
Alexander
парсек, у него есть эти комбинатоы
Ilya
тогда уж надо many letter или как там
Alexander
ну атоопарсек
Alexander
не знаю, many неПробел - вполне разумно
Alexander
а что там надо, нам не сказали
Ilya
я к тому, что не похоже, что это скомпилируется:) но может ошибаюсь
Ilya
например если что угодно, где нету пробела то слово это word = takeWhile (not . isSpace)
Ilya
тогда разбор будет: word `sepBy1` tab <* comma <* endOfLine
Alexander
я же написал, что +- имена комбинаторов
Ilya
ок понял
Ilya
значит это не тот word
Alexander
что я их помнить что-ли буду, если хаддок есть
Alexander
это не из data.list
Ilya
парсер C++ пишешь?
Alex
Да, мне нужно транслировать много старого кода в новый
Ilya
и какая добрая душа тебе посоветовала для этого Parsec? 😄
Alex
Первое что нагуглил
Alex
А есть либы проще?
Aleksei (astynax)
Тут можно вообще обойтись "без либ"
Aleksei (astynax)
words + отбросить запятые
Alexander
megaparsec / attoparsec
Alexander
тут можно и без либ, если задача полная
Alex
Тут можно вообще обойтись "без либ"
Это только подзадача, там много всего
Ilya
да готовое что-нибудь надо брать
Ilya
сейчас бы руками C++ код парсить
Слава
Парсил с++, случайно написал компилятор