Size: a a a

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

2017 December 19

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
И информация о том, что конструктор имеет некое поле, прилагается к конструктору
источник

AP

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

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
в Elm достать поле из data типа можно только через паттерн-матчинг
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Ага. Без матчинга всё равно до рекорда не добраться
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Вощм, самописные геттеры вместе со смарт-конструкторами - хороший сопсоб поиметь абстракцию
источник

AP

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

module Temp exposing (ProgrammContent, getMedType)

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

getMedType : ProgrammContent -> MedType
getMedType (ProgrammContent p) = .medType p
module Temp exposing (programmContent, getMedType)

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

programmContent : MedType =
programmContent t =
   ProgrammContent { medType = t, medInfo = Nothing }

getMedType : ProgrammContent -> MedType
getMedType (ProgrammContent p) = .medType p

типа такого
источник

ZK

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

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
Вот так:
module Temp exposing
       ( ProgrammContent
       , MedType
       , programmContent
       , getMedType)

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

programmContent : MedType =
programmContent t =
   ProgrammContent { medType = t, medInfo = Nothing }

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

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Ну да. Тип тоже надо. Просто без (..)
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Zheka Kozlov
тогда не будет тип виден
Это не всегда и нужно, кстати. Если на верхний уровень в сигнатуры тип никогда не попадает, то можно и не экспортировать :)
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
разве такое возможно?
источник

ZK

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

AP

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

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
--- Types.elm
module Types exposing (c, g21)

type T
   = C1 { g11 : Int, g12 : String }
   | C2 { g21 : Bool }

c = C2 { g21 = False }

g21 x =
   case x of
       (C2 x) -> .g21 x
       _ -> False

--- Main.elm
module Main exposing (main)

import Html
import Types exposing (..)

main = Html.text <| toString <| g21 <| c


`
источник

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Тут T нигде не фигурирует в Main в сигнатурах, но всё компилится
источник

ZK

Zheka Kozlov in Elm Lang сообщество разработчиков
в Java такое тоже работает
источник

ZK

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

AP

Aleksei (astynax) Pirogov in Elm Lang сообщество разработчиков
Само знание о некоторм типе доступно компилятору, если доступна хоть одна функция, с ним работающая. Вот чтобы в аннотациях типов тип использовать, нужно его конструктор экспортировать - очевидно же.
источник

AP

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

AP

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