Что означает тип Task x a = Task в реализации Task в Elm?

В этом примере Github определен тип задачи следующим образом:

type Task x a = Task

А затем выполните несколько функций, которые используют этот тип.

Как понимать тип задачи?

Что это значит, когда мы определяем тип как:

type Foo a b = Foo

Является ли Task конкретным случаем, когда мы полагаемся на нативную реализацию javascript для Task?


elm
person sebbrochet    schedule 15.08.2015    source источник


Ответы (2)


Является ли Task конкретным случаем, когда мы полагаемся на нативную реализацию javascript для Task?

В яблочко. Вы заметите, что Task тип, но не Task тег (то, что справа) экспортируется из модуля, поэтому вы не можете получить доступ к последнему. Это заполнитель, чтобы сделать систему типов счастливой.

Вместо этого реализация Native JavaScript знает, какие задачи на самом деле представляют собой JS-объект. Любой нативный модуль, связанный с задачами (будь то модуль Task или любая сторонняя библиотека, такая как elm-http), находится в секрете. Однако модуль Task экспортирует большое количество вспомогательных функций, с помощью которых вы можете в значительной степени контролировать задачи, используя только уже опубликованные библиотеки.

Уточнение Правка: Да, вам нужно использовать стороннюю библиотеку, чтобы получить задачу, которая действительно оказывает какое-то влияние на внешний мир. Чтобы на самом деле запустить эту задачу, вам нужно отправить ее через порт; пока вы этого не сделаете, Задача — это просто описание работы, которую нужно выполнить.

person mgold    schedule 15.08.2015
comment
Насколько я понимаю, асинхронные задачи можно создавать только со стороны JS. Я прав? - person Martinos; 15.08.2015
comment
Также кажется, что задачи означают много вещей: результат задачи и сама задача (асинхронный процесс). Мне трудно обойти концепцию задачи. - person Martinos; 15.08.2015
comment
@Martinos: С точки зрения пользователя Elm задача — это просто данные. Это значение, описывающее асинхронный процесс, и после того, как он будет правильно передан порту, среда выполнения интерпретирует задачу для ее фактического запуска. - person Apanatshka; 15.08.2015
comment
Думаю, мне нужно будет немного поразмыслить над этим. Спасибо за Ваш ответ. - person Martinos; 15.08.2015

Кажется, что это создает своего рода дикую карту.

В следующем коде:

import  Html exposing (..)

type Dog a = Fido

myFunc: Dog Int -> String
myFunc myDog =
  "Wouf Wouf" 

main = text (myFunc Fido)

myFunc ожидает Dog Int. Затем вы можете отправить Fido методу.

person Martinos    schedule 15.08.2015