Size: a a a

Scala User Group

2020 August 02

𝛈µ

𝛈 µ in Scala User Group
Sergey Alaev
Если мы про статью, то это константная функция, вычисляющая значение функтора. Я думал, что достаточно понятно - есть интерфейс Functor<A>, есть его реализации.
Нет, непонятно
источник

SA

Sergey Alaev in Scala User Group
𝛈 µ
Нет, непонятно
так тебе и не надо, ты и так всё понял давно
источник

𝛈µ

𝛈 µ in Scala User Group
Sergey Alaev
Если мы про статью, то это константная функция, вычисляющая значение функтора. Я думал, что достаточно понятно - есть интерфейс Functor<A>, есть его реализации.
Покажи мне пример "передачи данных по сети" тогда плес
источник

𝛈µ

𝛈 µ in Scala User Group
Functor<A> = peredachadannikhovernetwork?
источник

SA

Sergey Alaev in Scala User Group
Λнтон Войцишевский
Ещё раз мап сделать -- все, что я могу
Интерфейс - это альтернативный вариант сделать функтор. Можно запилить тайпкласс с методом map, можно заимплеменить интерфейс с методом map
источник

SA

Sergey Alaev in Scala User Group
Λнтон Войцишевский
Ну сделал я foo.map(f), получил Functor<B>, что дальше мне делать?
Вот это странный вопрос). У нас есть код, которому для работы достаточно map, он будет абстрактный и всё такое. А вызывающая сторона может знать больше об этом типе.
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Sergey Alaev
Интерфейс - это альтернативный вариант сделать функтор. Можно запилить тайпкласс с методом map, можно заимплеменить интерфейс с методом map
Да пусть так, только интерфейс должен быть с тайп-параметром с дыркой, хосподи.
interface Functor<F<_>, A>{
 fun <B> map(f: A -> B): F<B>
}
У вас в статье не так.
источник

SA

Sergey Alaev in Scala User Group
Я, кажется, понял проблему. Подгорает у тех, кто уже давно в ФП. Кто ожидает увидеть законы, кто при виде Functor триггерится "тайпкласс неправильно объявлен" и т.п.
источник

𝛈µ

𝛈 µ in Scala User Group
Sergey Alaev
Я, кажется, понял проблему. Подгорает у тех, кто уже давно в ФП. Кто ожидает увидеть законы, кто при виде Functor триггерится "тайпкласс неправильно объявлен" и т.п.
Да у тебя просто херня написана, которая только еще больше запутает
источник

𝛈µ

𝛈 µ in Scala User Group
Λнтон Войцишевский
Да пусть так, только интерфейс должен быть с тайп-параметром с дыркой, хосподи.
interface Functor<F<_>, A>{
 fun <B> map(f: A -> B): F<B>
}
У вас в статье не так.
Разве котлин умеет в хкт?
источник

SA

Sergey Alaev in Scala User Group
Λнтон Войцишевский
Да пусть так, только интерфейс должен быть с тайп-параметром с дыркой, хосподи.
interface Functor<F<_>, A>{
 fun <B> map(f: A -> B): F<B>
}
У вас в статье не так.
Как раз нет, это не так. Правильный вариант - как в статье. Представь себе IO, который имплементит этот интерфейс. сигнатура же совпадет? за вычетом косяка, что map вернет Functor, а не IO
источник

𝛈µ

𝛈 µ in Scala User Group
Sergey Alaev
Как раз нет, это не так. Правильный вариант - как в статье. Представь себе IO, который имплементит этот интерфейс. сигнатура же совпадет? за вычетом косяка, что map вернет Functor, а не IO
Давай ты еще таким же способом интерфейс для монады сделаешь
источник

SA

Sergey Alaev in Scala User Group
𝛈 µ
Разве котлин умеет в хкт?
Не умеет. есть kotlin arrow-kt, но там костыли
источник

𝛈µ

𝛈 µ in Scala User Group
А то ты там обещал монаду в прелюдии, а потом про жалкий функтор пердел
источник

𝛈µ

𝛈 µ in Scala User Group
Народу нада манада
источник

SA

Sergey Alaev in Scala User Group
𝛈 µ
Народу нада манада
Есть там манада. И абзац по теме есть:
В качестве примера реализуем функтор, который возвращает значение A, содержащее в себе некоторое количество случайных бит. Наш интерфейс в Котлине так просто использовать не получится (но при желании можно), поэтому напишем extension method:
источник

SA

Sergey Alaev in Scala User Group
Я вижу, ты до него не дочитал)
источник

𝛈µ

𝛈 µ in Scala User Group
Щас дочитаю
источник

𝛈µ

𝛈 µ in Scala User Group
Даешь енотов-полоскунов
источник

𝛈µ

𝛈 µ in Scala User Group
interface Monad<A> {
   // монада является функтором, но map реализовывать отдельно не нужно -
   //   он выражается через flatMap и lift
   fun <B> map(f: (A) -> B): Monad<B> = flatMap { a -> lift(f(a)) }
   fun <B> flatMap(f: (A) -> Monad<B>): Monad<B>
}

fun <A> lift(value: A): Monad<A> = TODO()
источник