Size: a a a

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

2020 October 26

YK

Yuri Kostin in Elm Lang сообщество разработчиков
Aleksei (astynax) Pirogov
Ладно, чёт углубились. Тут эльмочат
А вообще интересная тема на самом деле)
Увидеть как применяют хаскель для одной из самых частых задач - реализации rest API.
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Да REST не модный же. GraphQL же в тренде. Для него тоже есть решения
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Yuri Kostin
А вообще интересная тема на самом деле)
Увидеть как применяют хаскель для одной из самых частых задач - реализации rest API.
https://docs.servant.dev/en/stable/tutorial/ApiType.html вот тут показано, как оно выглядит
источник

YK

Yuri Kostin in Elm Lang сообщество разработчиков
Aleksei (astynax) Pirogov
https://docs.servant.dev/en/stable/tutorial/ApiType.html вот тут показано, как оно выглядит
Огонь, спасибо большое.
Не уверен, что смогу понять сейчас, но Курта закончу - вернусь к ссылке
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
А вообще моща самая, это Generic-сервер :)
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
data Routes route = Routes
   { _get :: route :- Capture "id" Int :> Get '[JSON] String
   , _put :: route :- ReqBody '[JSON] Int :> Put '[JSON] Bool
   }
 deriving (Generic)

api :: Proxy (ToServantApi Routes)
api = genericApi (Proxy :: Proxy Routes)
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Задаёшь тип, получаешь сервер
источник

YK

Yuri Kostin in Elm Lang сообщество разработчиков
👀👀👀
источник

YK

Yuri Kostin in Elm Lang сообщество разработчиков
Это вообще законно?)
источник

K

Kir in Elm Lang сообщество разработчиков
Да
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
data Example = Example
   { foo :: Int    <?> "Documentation for the foo flag"
   , bar :: Double <?> "Documentation for the bar flag"
   } deriving (Generic, Show)

instance ParseRecord Example

main = do
   x <- getRecord "Test program"
   print (x :: Example)

вот ещё "пишешь тип, получаешь CLI"

Test program

Usage: Example.hs --foo INT --bar DOUBLE

Available options:
 -h,--help                Show this help text
 --foo INT                Documentation for the foo flag
 --bar DOUBLE             Documentation for the bar flag
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Вот это реальная польза от тайпклассов
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
Причём тип-сумма работает как подкоманды:
data Example
   = Create { name :: Text, duration :: Maybe Int }
   | Kill   { name :: Text }
   deriving (Generic, Show)
позволит писать
$ app create --name foo --duration=60
источник

YK

Yuri Kostin in Elm Lang сообщество разработчиков
Блин, пока не всё понятно, Лёш 🙈🙈🙈

Пошёл продолжать Курта читать 😊
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
хехе
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
Господа функциональные программисты. Столкнулся тут с забавной задачкой, если решать в лоб, получается жесть (хотя работает), может есть какая концепция о которой я не знаю?
Задача такая, вэбртиси (эт как обычно у меня), клиент выбирает какие каналы коммуникации будут ему доступны... ограничимся пока аудио и видио... итак где-то в далекой админке он выбрал... а потом, спустя какое-то время он стартует сессию...
У нас есть набор констрейнтов (два булеан флага например), и апи браузера, которое либо даст нам поток либо упадёт. Некоторые ошибки мы можем отловить, например пользователь отказался дать доступ к устройству, или например девайс уже захвачен кем-то другим
Проблемы начинаются тогда, когда мы хотим расшарить и аудио и видео. Нам возвращается ошибка, но мы не знаем к чему именно ошибка относится, и единственный путь узнать это попробовать с другими констрейнтами. Например отключим видео, попробуем только аудио... если не сработало - отключим аудио, попробуем только видео... еси не сработало значит оба девайса нам недоступны...
В императивном коде это лютая вложенность трай-кэтч блоков... а как сделать функционально и желательно красиво? Может какая монадка подходящая найдётся?
источник

DK

Denis Krivosheev in Elm Lang сообщество разработчиков
А надо нам получить сам поток если возможно, ошибки аудио и ошибки видео
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
WriterT [Error] (MaybeT IO Conn)
источник

AP

Aleksei (astynax) Pi... in Elm Lang сообщество разработчиков
(простити)
источник