Size: a a a

Scala User Group

2020 October 16

λ

λoλcat in Scala User Group
на второй вопрос ответ такой же - ничем не ограниченный полиморфизм = полное отсутствие знаний о типах А и B. мы не знаем ни одного способа работать со значением типа А, поэтому остается только вернуть первый аргумент
источник

SK

Sergey Kucherenko in Scala User Group
RAFIZ
почитал её (и предшествующие ей две статьи тоже, их как раз понял на 100%), спасибо

а по вот этой статье есть вопрос, например: в этом куске статьи сказано, что вторая функция всегда будет возвращать истину. а почему?есть же конкретные типа данных, для которых можно реализовать первую функцию (func) так, что вторая theorem будет возвращать false (Int, например)

или суть как раз в том, что первую если функцию оставить полиморфной, а не конкретной, то её тело никак невозможно будет написать таким образом, чтобы theorem не обращалась в true?
У нас здесь есть: функция func, она у нас List[A] => List[A], есть список x, есть функция над элементами списка A => A. Функция f, как вы сказали, может работать с конкретными типами, например, мы туда можем передать Int => Int. Функция func объявлена так, что работать с конкретными типами не может, может работать только опираясь на структуру списка. Ревертнуть его, например. И нам все равно, когда мы применим функцию к элементам списка, до того, как мы сделали - условно - реверт, или после.
источник

λ

λoλcat in Scala User Group
(в скале есть одна поправка. на самом деле любой полиморфизм - ограничен сабтайпингом A <: Any, но этим принятно не пользоваться)
источник

λ

λoλdog in Scala User Group
λoλcat
(в скале есть одна поправка. на самом деле любой полиморфизм - ограничен сабтайпингом A <: Any, но этим принятно не пользоваться)
Странно, что Тони не написал этого
источник

λ

λoλdog in Scala User Group
Так-то там сразу появляется куча вариантов функции
источник

SK

Sergey Kucherenko in Scala User Group
λoλdog
Странно, что Тони не написал этого
он опирается на т.н. Fast and Loose Reasoning (есть соотв. статья, по-моему, от Jeremy Gibbons, Fast and Loose Reasoning is Morally Correct). В общем, идея в том, что если работать в не очень хорошем языке так, как будто у тебя язык очень хороший, то жить можно.
источник

λ

λoλdog in Scala User Group
Логично
источник

λ

λoλdog in Scala User Group
Можно жить и с плохим языком
источник

SK

Sergey Kucherenko in Scala User Group
RAFIZ
почитал её (и предшествующие ей две статьи тоже, их как раз понял на 100%), спасибо

а по вот этой статье есть вопрос, например: в этом куске статьи сказано, что вторая функция всегда будет возвращать истину. а почему?есть же конкретные типа данных, для которых можно реализовать первую функцию (func) так, что вторая theorem будет возвращать false (Int, например)

или суть как раз в том, что первую если функцию оставить полиморфной, а не конкретной, то её тело никак невозможно будет написать таким образом, чтобы theorem не обращалась в true?
Помогло? если нет, попробуйте написать, что смущает в этом.
источник

R

RAFIZ in Scala User Group
Sergey Kucherenko
Помогло? если нет, попробуйте написать, что смущает в этом.
ваш ответ помог (что оперируем только тем, что список пр доставляет нам список)
источник

R

RAFIZ in Scala User Group
спасибо
источник

R

RAFIZ in Scala User Group
а ответ на второй вопрос - нет, ибо в предыдущем посте мы о типах А, В, С тоже ничего не знали, но оставляли количества возможных вариантов значений этих типов равными самим буквам, а не единице (из-за того что не знаем о них ничего)
источник

R

RAFIZ in Scala User Group
RAFIZ
а ответ на второй вопрос - нет, ибо в предыдущем посте мы о типах А, В, С тоже ничего не знали, но оставляли количества возможных вариантов значений этих типов равными самим буквам, а не единице (из-за того что не знаем о них ничего)
например вот (ссылка на этот пост в самом посте, в начале)
источник

λ

λoλcat in Scala User Group
RAFIZ
например вот (ссылка на этот пост в самом посте, в начале)
здесь A B C не параметры в том же смысле, как в вашем вопросе
источник

R

RAFIZ in Scala User Group
λoλcat
здесь A B C не параметры в том же смысле, как в вашем вопросе
источник

R

RAFIZ in Scala User Group
ну абстрагируемся от вопроса.

давайте поймём тогда: они параметры в том же смысле, что у функции на скриншоте выше?
источник

λ

λoλcat in Scala User Group
функция на скриншоте: forall A B: (A, B) => A
источник

λ

λoλcat in Scala User Group
forall здесь важно
источник

λ

λoλcat in Scala User Group
источник

R

RAFIZ in Scala User Group
λoλcat
функция на скриншоте: forall A B: (A, B) => A
для f: A => A - тоже один способ?
источник