Арго - что означает стрелка в методе декодирования?

Я пытаюсь освоить Арго для JSON декодирования. В документации есть пример функции декодирования

extension User: Decodable {
  static func decode(j: JSON) -> Decoded<User> {
    return curry(User.init)
     <^> j <| "id"
     <*> j <| "name"
    }  
}

Что значит <^> а также <*> имею в виду? В чем разница между ними?

2 ответа

Решение

Tldr, использовать <^> для первого параметра и использования <*> для каждого параметра после этого.

Длинный ответ:<^> такой же, как у Свифта map функция. Этот оператор заимствован из Haskell (чисто функциональный язык программирования). Хотя в Хаскеле это на самом деле <$> но Свифт не может использовать $ в его операторах, поэтому мы (и другие в сообществе) выбрали <^> вместо.

<^>ака map, применяет функцию к значению внутри контекста. Этот контекст может быть Optional, Array, Dictionaryили много других. В контексте Optional, <^> будет применять функцию в первом аргументе (слева от оператора) к необязательному значению во втором аргументе (справа от оператора). Результат будет .none если необязательное значение было .none или же .some(x) где x является результатом необязательного необязательного значения после его передачи в функцию.

Я надеюсь, что в этом есть смысл. Если так, <*> не сильно отличается, за исключением того, что функция в первом аргументе также обернута в такой контекст, как Optional, Итак, у вас есть Optional функция и Optional значение, то вы бы использовали <*>, Вот почему мы используем <*> после того, как мы используем <^> в первый раз, потому что после первого <^>, mapу нас остался частично примененный конструктор (функция), который был обернут в контекст <^>,

<*> взят из Хаскелла. В Хаскеле это называется Applicative и использует тот же оператор.

Согласно документации Github...

<^> это map функция

а также

<*> это apply функция

Оба из них описаны здесь... https://robots.thoughtbot.com/functional-swift-for-dealing-with-optional-values

Ссылка со страницы Github.

NB Читайте документацию:)

Другие вопросы по тегам