Как мне сопоставить типы аргументов Elmish toNavigable

В данный момент я пытаюсь изучить стек SAFE, в частности, пытаюсь справиться с переходом по URL через Elmish; Я следовал примеру кода на сайте Elmish, который определяет функцию отображения маршрута, а затем передает его в функцию parsePath. Однако Program.toNavigable ожидает тип Parser<'a> (псевдоним типа для Location -> ' a) в качестве первого аргумента, но первый аргумент примера кода (маршруты parsePath) - это опция Location -> '. Очевидно, я могу использовать композицию функций, чтобы получить правильную типизацию, но мне кажется, что я что-то здесь упускаю. Может кто-нибудь, знакомый с навигацией по URL в Elmish посоветовать

1 ответ

Решение

Ну а Parser<'a option> это Parser<'a> (просто с другим 'a), так что все должно составлять просто отлично.

Скажем, например, что следующий тип определяет всю навигацию:

type Route = Blog of int | Search of string

Тогда вовлеченные стороны должны иметь следующие типы:

init: Route option -> Model * Cmd<Msg>
parser: Parser<Route option>
urlUpdate: Route option -> Model -> Model * Cmd<Msg>

и вы составляете свою программу таким образом:

Program.mkProgram init update view
|> Program.toNavigable parser urlUpdate
|> Program.withReactBatched "elmish-app"
|> Program.run
Другие вопросы по тегам