Size: a a a

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

2019 June 26

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Damir K
Окей) Но читаемости добавляет)
Только когда ты алиасишь что-то сложное. Вроде


type App cfg mode data = ...

type alias SimpleApp =
   App SimpleConfig DebugMode ()
источник

DK

Damir K in Elm Lang сообщество разработчиков
По алиасам стало понятнее, а вот про обёртки, что имеется ввиду?
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
вот обёртка для строки
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
type Error = Error String
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Это новый тип, но изоморфный строке (множество значений совпадает с множеством значений типа "строка")
источник

DK

Damir K in Elm Lang сообщество разработчиков
Всё, дошло) Спасибо!)
Это хорошо, но почему когда в моём примере в полях одинаковые значения, то мы всё еще видим ошибку?)
источник

RT

Roman Truschev in Elm Lang сообщество разработчиков
Кстати кто как у себя организовывает типы вроде такой ошибки error string. Отдельный файл на каждый подобный тип и внутри map и какой нибудь unwrap/toString ? Или всю подобную мелочь в кучу и назывете unwrapError/unwrapFirstName/...
источник
2019 June 27

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
unwrap не нужен
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Pattern Matching ибо. Достаточно экспортировать конструктор обёртки
источник

AP

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

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
А в случае чего и пайпнуть через (\(NameError s) -> s) не страшно
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
минус одна функция, которой нужно имя придумывать :)
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Если все ошибки фнутри строковые, то можно саму обёртку потэгать, тогда часть поведения можно будет обобщить
источник

AP

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

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Но такие ошибки уже могут смешиваться, т.е. снаружи это один тип.
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Зато если параметризовать фантомным типом, то будет и безопасность в плане несмешивания, и часть кода можно будет обобщить: https://ellie-app.com/5VYvStm53f4a1
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
https://ellie-app.com/5VYxW6846yca1 вот тут обобщена функция для извлечения текста из типа ошибки
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Можно даже между ошибками конвертирсию сделать
convert : tag1 -> tag2 -> Error tag1 -> Error tag2
convert _ _ (Error s) = Error s


convert Foo Bar <| error Foo "foo"
источник

RT

Roman Truschev in Elm Lang сообщество разработчиков
Ага, я это понимаю. Просто поинтересовался все ли примерно так и делают.
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Вполне обычная практика
источник