Size: a a a

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

2017 December 18

к

кана in Elm Lang сообщество разработчиков
если при использовании значения нужно зачастую доставать все значения и их мало - продакт, если только какие-то конкретные, а остальные игнорить - рекорд
источник

AK

Anton Kotenko in Elm Lang сообщество разработчиков
источник
2017 December 19

RS

Roman Salnikov in Elm Lang сообщество разработчиков
Филипп
никак не могу решить вопрос types vs records
есть тип

type MedType
   = Poly
   | Stomat
   | Home


использую его в

type ProgrammContent
   = ProgrammContent MedType (Maybe Int)


либо

type alias ProgrammContent =
     { medType : MedType
   , medInfo : Maybe Int
}
Помимо сказанного выше, первый вариант удобно использовать для сокрытия деталей имплементации внутри модуля. Это было у Эвана в докладе Life of File
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
Тогда лучше сделать так, ИМХО:
type ProgrammContent = ProgrammContent
     { medType : MedType
   , medInfo : Maybe Int
}
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
Тогда будет и сокрытие, и нормальные имена полей
источник

к

кана in Elm Lang сообщество разработчиков
сокрытие разве будет? То есть геттеры нужно отдельно экспортировать?
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
Вот так правильно:
module Temp exposing (ProgrammContent)

type ProgrammContent = ProgrammContent
     { medType : MedType
     , medInfo : Maybe Int
     }
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
тогда будет абстрактный тип ProgrammContent, про который ничего неизвестно кроме названия типа
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Можно экспортировать даже выборочные геттеры
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
module Temp exposing (ProgrammContent) прячет ещё и конструктор
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
module M exposing (T(someGetter,SomeConstructor(..)) и всякое такое
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
не путаешь ли ты с Хаскеллем?
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
или ты имеешь в виду геттер как самописная функция?
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Я вот сам засомневался, всё ли работает. Надо проверить :) Частичные экспорты конструкторов точно работают
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
Как-то так:

module Temp exposing (ProgrammContent, getMedType)

type ProgrammContent = ProgrammContent
     { medType : MedType
     , medInfo : Maybe Int
     }

getMedType : ProgrammContent -> MedType
getMedType (ProgrammContent p) = .medType p
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Вот да, геттеры экспортируются вместе с конструктором
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
В Elm вообще нету геттеров у data типов
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
Есть только геттеры у рекордов
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Т.о. нельзя экспортировать геттер, не экспортируюя конструктор
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Zheka Kozlov
В Elm вообще нету геттеров у data типов
Есть "схема полей" типа
источник