2014-11-24 4 views
3

Мне было интересно, если scala Either действительно является Monad в категории Theory sense ?. Я знаю, что Monads должен иметь методы bind и return. Что такое Eitherbind?Is Scala Либо действительно Монада

+0

http://scabl.blogspot.com/2013/02/monads-in-scala-1.html: * Операция привязки, как функция Scala, имела бы следующую подпись: * 'def bind [A , B] (Возможно, [A]) (A => Maybe [B]): Возможно [B] ' –

+0

Я бы сказал, что Haskell' Maybe' в Scala больше похож на «Option», чем «Либо». «Либо» - это кооперация типов. – goral

+0

Прочтите статью. Он обращается с этим. –

ответ

3

Да, это действительно так - иначе это было бы в скалаз-вне закона. Either «s bind определяется что-то вроде:

trait Either[A, B] { 
    def bind[C](f: B => Either[A, C]) = this match { 
    case Right(b) => f(b) 
    case Left(a) => Left(a) 
    } 
} 

(на практике это определено через класс типов, но приведенное выше определение будет работать)

Я предполагаю, что правильнее было бы сказать, что при фиксированном A, то тип ({type L[B]=Either[A, B]})#L образует a Monad, поэтому Either - это более класс Monads, чем Monad в своем собственном праве, но это чрезвычайно техническое различие.

Но это действительно Monad; он удовлетворяет всем монадам.

+0

Итак, точнее сказать, что 'Right' и' Left' являются 'Monads', тогда как' Either' сам не является, а его подклассами? – goral

+1

Нет, это неправильно. «Левый» сам по себе не является «Монадом» вообще, а «Право» сам по себе является только личностью «Монад». Если вы хотите быть точным, то «Монада» на самом деле не является чертой (которая, в конце концов, не является математической концепцией), как набор и пара операций. Таким образом, это больше похоже на «для любого' A', множество всех «Либо [A, B]» формирует монаду под операциями «bind = ...» и «point = ...»). – lmm

+0

As of Scala 2.12, либо стало правым, так и технически. Либо в корне стало более единообразным с другими реализациями Monad (в этом не нужно было выбирать проекцию, из которой затем выполнялись операции Monad). – chaotic3quilibrium

 Смежные вопросы

  • Нет связанных вопросов^_^