AP
Size: a a a
AP
k
AP
k
AP
AP
k
Вл
AP
extendWith :
(symbol, a)
-> {record}
-> {record | symbol : a}
extendWith (k, v) record = { record | 'k = v }
(.:) : { rec | symbol : a } -> symbol -> a
(.:) = ... -- это была бы встроенная операция
init =
{ home = HomePage.init
, currentPage = 'home }
|> extendWith ( 'books, BooksPage.init )
|> extendWith ( 'users, UsersPage.init )
view model =
let
views = { home = HomePage.view, ... }
in
(views .: model.currentPage)
(model .: model.currentPage)
AP
{ pageHome : ...
, pageBooks : ...
, pageUsers : ...
}
= PageHome PageHome.Model
| PageBooks PageBooks.Model
| PageUsers PageUsers.Model
Either
PageHome.Model
( Either
PageBooks.Model
PageUsers.Model
)
((v1, v2), v3)
Right (Left submodel)
PageBooks
). И этот же "путь" будет доставать соответствующую вьюху и соответствующий апдейт. Собственно, таким образом мы просто закодируем произвольный тип-сумму (enum) в виде Tuple и Either - такой "паттерн" даже есть :)AW
AP
AW
AP
AP
AP
AP
AP
к