Size: a a a

Elm Lang сообщество разработчиков

2018 November 22

R:

Ryner :: () -> IO ❄️ in Elm Lang сообщество разработчиков
Но я имел ввиду styled like
источник

R:

Ryner :: () -> IO ❄️ in Elm Lang сообщество разработчиков
Я могу написать такое в эльме и стили по класса разбегуться
источник

R:

Ryner :: () -> IO ❄️ in Elm Lang сообщество разработчиков
Что позволяет удобно динамически менять и генерить css-ку
источник

λ

λоλторт in Elm Lang сообщество разработчиков
(
Ну, вон есть Arrow - там некоторые тайпклассы применяются вот так:
String.eq() // получение инстанса
 .run {
   "1" eqv "2"
}
Так вот смысл в чем - вне скоупа лямбды run вы не можете сравнивать строки через eqv, зато внутри скоупа строки приобретают новую функциональность засчет того, что контекст переносится внутрь инстанса тайпкласса Eq для строк. Представьте теперь, что у вас не String.eq(),  а, например, какой-нибудь AnalyticsContext, внутри которого инкапсулирован инстанс какого-нибудь веб-клиента, который отсылает аналитику куда-нибудь. И вы пишете:
AnalyticsContext().run { // перенос контекста
 Event(id, type).send() /* вне AnalyticsContext тип Event не имеет поведения "send" */
}
И смысл такого подхода в том, что вам не приходится пользоваться, к примеру, DI-ем, потому что вся функциональность поделена на такие вот контексты, которые имеют максимум пару зависимостей. Вооот
ваши "монады" так себе компонуются, и контроля за эффектами на уровне типов, судя по всему, нет
источник

λ

λоλторт in Elm Lang сообщество разработчиков
с полиморфизмом тоже проблемы напрашиваются
источник

(

( in Elm Lang сообщество разработчиков
λоλторт
ваши "монады" так себе компонуются, и контроля за эффектами на уровне типов, судя по всему, нет
Начать с того, что монады все таки изначально в котлине не нужны
источник

R:

Ryner :: () -> IO ❄️ in Elm Lang сообщество разработчиков
λоλторт
с полиморфизмом тоже проблемы напрашиваются
В эльме с полиморфизом все просто ужасно
источник

R:

Ryner :: () -> IO ❄️ in Elm Lang сообщество разработчиков
Вы видели как elm-css написан?
источник

e

eahqzsr in Elm Lang сообщество разработчиков
Ryner :: () -> IO ❄️
Но я имел ввиду styled like
purescript-styled-components и тп?
источник

R:

Ryner :: () -> IO ❄️ in Elm Lang сообщество разработчиков
eahqzsr
purescript-styled-components и тп?
Да, что-то подобное, работающее надо
источник

R:

Ryner :: () -> IO ❄️ in Elm Lang сообщество разработчиков
eahqzsr
purescript-styled-components и тп?
Пишу по-немногу сам, но времени особо нет на это
источник

λ

λоλторт in Elm Lang сообщество разработчиков
(
Начать с того, что монады все таки изначально в котлине не нужны
s/не нужны/не спасут/
источник

R:

Ryner :: () -> IO ❄️ in Elm Lang сообщество разработчиков
А с каких пор котлин это pure fp?
источник

(

( in Elm Lang сообщество разработчиков
λоλторт
s/не нужны/не спасут/
Мне Arrow главным образом нравится из-за того, что можно уйти от богопротивных исключений. Either вполне справляется, а большего и не надо
источник

(

( in Elm Lang сообщество разработчиков
Полиморфизм тоже сносный - есть некое подобие comprehension, а над какими типами он работает уже дело десятое
источник

(

( in Elm Lang сообщество разработчиков
Ryner :: () -> IO ❄️
А с каких пор котлин это pure fp?
Так никто этого и не говорил
источник

(

( in Elm Lang сообщество разработчиков
Мы вообще в команде недавно поймали Arrow на том, что IO бесполезный
источник

(

( in Elm Lang сообщество разработчиков
Просто смысл в том, что где есть откровенно грязный код (уж в андроиде-то да в спринге его дофига) можно бахнуть компрехеншен и написать немного императивного кода, а в макро-видении это все все равно композируется и является полиморфным
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
вроде бы, "прошлый я" должен был участвовать в этом "обсуждении", но вы и сами хорошо справляетесь
источник

I

Igor in Elm Lang сообщество разработчиков
(
Ну, вон есть Arrow - там некоторые тайпклассы применяются вот так:
String.eq() // получение инстанса
 .run {
   "1" eqv "2"
}
Так вот смысл в чем - вне скоупа лямбды run вы не можете сравнивать строки через eqv, зато внутри скоупа строки приобретают новую функциональность засчет того, что контекст переносится внутрь инстанса тайпкласса Eq для строк. Представьте теперь, что у вас не String.eq(),  а, например, какой-нибудь AnalyticsContext, внутри которого инкапсулирован инстанс какого-нибудь веб-клиента, который отсылает аналитику куда-нибудь. И вы пишете:
AnalyticsContext().run { // перенос контекста
 Event(id, type).send() /* вне AnalyticsContext тип Event не имеет поведения "send" */
}
И смысл такого подхода в том, что вам не приходится пользоваться, к примеру, DI-ем, потому что вся функциональность поделена на такие вот контексты, которые имеют максимум пару зависимостей. Вооот
А если нужно 2 контекста, а сам код вынести в отдельную функцию?
источник