Evgeny
А если не привязываться к наличию локализованной версии?
Viacheslav
то тоже лушее, что есть, мне кажется
Зигохистоморфный
А есть DTAPL?)
кана
Как тут относятся к рекламе каналов? Я только изучаю фп, теорию типов, категорий, прочее. Во время изучения все, что я узнал, пытаюсь упорядочить в виде постов. Когда пытаешься что-то объяснить, то понимаешь все намного лучше. Раньше я их в свою группу кидал, но сегодня начну кидать в канал в телеге.
Dmitry
смотря каких каналов.
Dmitry
думаю, что ссылка на канал по ФП - это нормально
кана
https://t.me/kanaflow
Andrey
и много у тебя участников / подписчиков?
кана
ну собственно пример поста (в данный момент я изучаю зависимые типы, но данный пост необходим для старта)
кана
ADT - произведение и копроизведение типов Тип можно трактовать как множество значений. Мощность типа - количество элементов в этом множестве. Произведение типов - декартово произведение множеств, то есть множество всех возможных пар, где первый элемент - элемент первого множества, а второй - второго. A = {a, b, c} B = {x, y} A×B = {(a, x), (a, y), (b, x), (b, y), (c, x), (c, y)} Мощность произведения двух множеств равна произведению мощностей множителей. |A × B| = |A| × |B| Пример в хаскеле: -- тут мы говорим, что `x` -- имеет тип `(Int, String)` x :: (Int, String) -- а тут мы говорим, какое у -- x значение x = (1, "hello") -- делаем тип IntStringPair -- значение которого является пара -- из числа и строки. -- Для создания значения этого типа -- используется конструктор MkIntStringPair -- который принимает число и строку -- и создает элемент типа IntStringPair data IntStringPair = MkIntStringPair Int String y :: IntStringPair y = MkIntStringPair 1 "hello" -- Конструктор и тип могут иметь -- одно название, они не будут -- пересекаться, ведь типы можно -- использовать только в сигнатуре, -- а конструкторы только в выражениях data Triple a b c = Triple a b c z :: Triple Int String Int z = Triple 1 "hello" 2 Меченное объединение, сумма или же копроизведение типов - объединение двух множеств так, что каждый элемент нового множества помечается исходным множеством, благодаря чему новый тип будет содержать все копии значений из исходных множеств. A = {1, 2, 3} B = {3, 4} A + B = {A 1, A 2, A 3, B 3, B 4} Как видно, каждый элемент нового множества помечен исходным множеством, поэтому число 3 встречается дважды, ведь A 3 ≠ B 3. Очевидно, мощность такого типа равна сумме мощностей слогаемых. |A + B| = |A| + |B| В хаскеле суммы типов создаются с помощью символа | в определении типа (или же с помощью определений конструкторов с GADTs). data Either a b = Left a | Right b x, y :: Either Int String x = Left 10 y = Right "hello" data Bool = False | True -- изоморфно Either () () -- где () - единичное множество, -- то есть множество из одного элемента -- () = {()} -- (Важно не путать ()-тип и ()-значение) z, u :: Bool z = False -- Left () u = True -- Right ()
Зигохистоморфный
https://t.me/kanaflow
аахах про списки мне это что-то напомнило)
кана
ну в группе 170, в канале, который ток создал, 14
кана
да, впервые увидел у тебя)
кана
потом в теоркате для программистов
Зигохистоморфный
да, впервые увидел у тебя)
вообще лучще про алгебру типов прочитай)
кана
да, собственно сейчас я это и делаю и постить и собираюсь, но для начала в канал нужны основы, чтобы можно было с нуля его начать читать
Зигохистоморфный
да, собственно сейчас я это и делаю и постить и собираюсь, но для начала в канал нужны основы, чтобы можно было с нуля его начать читать
https://codewords.recurse.com/issues/three/algebra-and-calculus-of-algebraic-data-types http://chris-taylor.github.io/blog/2013/02/10/the-algebra-of-algebraic-data-types/ http://chris-taylor.github.io/blog/2013/02/11/the-algebra-of-algebraic-data-types-part-ii/ http://chris-taylor.github.io/blog/2013/02/13/the-algebra-of-algebraic-data-types-part-iii/
кана
благодарю
Зигохистоморфный
Начало в SICP
просто я вывел Fix на типах тогда показавши что список можно записать по другому
Зигохистоморфный
@kana_sama ладно побуду в твоем канале пока)
Anonymous
Есть у кого интресных ресурсов по аппликативным языкам (статей, например) - т.е., по Forth, Joy, Factor?
Зигохистоморфный
https://soundcloud.com/lambda-cast
Anonymous
Joy-то как раз аппликативный. На комбинаторах - unlambda :)
Зигохистоморфный
в вики видел такое https://wiki.haskell.org/Applicative_data-driven_programming
Anonymous
Благодарю.
Зигохистоморфный
было что-то у меня в загашниках по joy надо искать
a66ath
@xgrommx ATTaPL есть
Зигохистоморфный
где?)
a66ath
https://www.cis.upenn.edu/~bcpierce/attapl/
Viacheslav
@xgrommx ATTaPL есть
ну до TAPL читать смысла особого нет)
Зигохистоморфный
а где книга?)
a66ath
Книга на либгене
Зигохистоморфный
интересно а переводов нет) как тапл
Anonymous
http://www.hawaga.org.uk/ben/tech/london-hug-acme-smuggler/presentation.html
Зигохистоморфный
у кого-то есть книга Марлоу на русском?
Vasiliy
у меня есть, в бумажном виде
Зигохистоморфный
эх)) отсканируй)
Alexander
а зачем на русском?
Зигохистоморфный
надо)
Нурлан
правда она уже расклеелась, могу дать
Зигохистоморфный
как?) я же с Украины
Нурлан
эм, ну тогда не могу
Зигохистоморфный
разве что прислать...
Aleksei (astynax)
https://www.litres.ru/saymon-marlou/parallelnoe-i-konkurentnoe-programmirovanie-na-yazyke-haskell-22873018/
Aleksei (astynax)
420р за отличную книгу - не так много, я считаю
Dmitry
++
Dmitry
лучшая книга по хаскеллу же.
Dmitry
точно не много.
Aleksei (astynax)
Заодно и издательству денег перепадёт. "ДМК Пресс" стоит поддержать - переводят хорошие книги и продают по разумным ценам
Ilya
Написал небольшой модуль, обобщающий понятие индекса списка (массива). Кроме индексирования с начала (Int) теперь можно указывать в любую точку списка (массива), например в конец или в середину. Новый индекс является инстансом Num, поэтому поддерживает арифметику и неявный каст с инта (fromInteger) => старый код не сломается, если пользоваться моими индексами. Переопределены функции (!!), take, drop, splitAt из Data.List λ> let x = [1..7] λ> x !! 0 1 λ> x !! end 7 λ> x !! (end-3) 4 λ> x !! mid 4 λ> let x = "Hello World!" λ> splitAt end x ("Hello World","!") λ> splitAt (mid+1) x ("Hello W","orld!") λ> splitAt (mid-1) x ("Hello"," World!") Это кому-нибудь интересно? Где стоит это выложить? Могу рассказать немного по-подробнее и показать код, его немного.
Ilya
Синтаксис x !! end подобен матлабу или джулии, но вместо end можно взять любое другое слово или знак, т.к. это просто синоним
Ilya
короче такой вот сахарок на уровне типов, а не на уровне макросов
Donat
Мне интересно, выкладывай
Ilya
ща, зарегаюсь на гитхабе тогда только, чтобы не файл кидать
Alexander
x Vector.! (fromIntegral end) что мне скажет?
Alexander
error или не скомпилируйтс я?
Serghei
🤔
Ilya
какой тип у Vector.! ?
Ilya
я пока переопределил функции только в Data.List, потом собираюсь переопределить для IArray и MArray
Ilya
откуда нужно Vector.! импортировать?
Alexander
Vector a -> Int -> a
Alexander
в общем что будет если я fromInteger на end натравлю
Alexander
(просто интересно)
melvin
нормально что выражения вроде (\x y z -> [x,y,z]) <$> (+3) <*> (*2) <*> (/2) только понимаются при помощи ручки и бумажки? это пройдет со временем?
Ilya
в общем что будет если я fromInteger на end натравлю
ну он говорит Couldn't match expected type ‘Integer’ with actual type ‘Index Int’ правильно будет x Vector.! end но это будет работать, когда я переопределю Vector.! для работы со своим типом
Ilya
выражение fromInteger end не имеет смысла, вообще говоря
Ilya
т.е. туда не "зашита" длина какого-то конкретного списка
Alexander
fromIntegral конечно же
Ilya
да тоже самое
Ilya
Index нельзя сделать инстансом Integral, т.к. нельзя корректно определить функцию toInteger
Ilya
потому что это расширение целых чисел, если так можно выразиться
Ilya
т.е. добавляются новые элементы, не сводимые к целым числам, но могущие участвовать в индексировании массивов (списков)
Alexander
нормально что выражения вроде (\x y z -> [x,y,z]) <$> (+3) <*> (*2) <*> (/2) только понимаются при помощи ручки и бумажки? это пройдет со временем?
то что f <$> a <*> b .. только по бумажке пройдет, желание писать такое выражение как выше пройдет тоже
melvin
то есть так делать не хорошо?
Alexander
@Masteroid ок, я неправильно твоё сообщение выше распарсил