2013-04-25 2 views
4

Простой вопрос, я смотрел на этот уже: Managing imports in Scalaz7, но я не могу понять, как минимально впрыснуть right и left методы в мои объекты для создания экземпляров \/ ,Scalaz минимальный импорт требуется вводить правое и левое использование

Я попробовать:

import syntax.ToDataOps и другие варианты To...syntax.ToIdOps, таких как, как предложено в http://eed3si9n.com/learning-scalaz-day13.

Простой пример:

import scalaz.{\/, syntax} 
import // What goes here 

class Test { 

    def returnEitherT(h: Int): String \/ Int = { 
     h right 
    } 
} 

Спасибо, Джейсон.

===========

я решил его с помощью import syntax.id._, но я не уверен, почему это работает.

+1

Вы должны сделать ваше решение ответа - я думаю, что есть так значки для ответа на свой вопрос и т.д. –

+0

@NoelM спасибо, но в этом случае я буду пойдите с ответом Бена, поскольку он понимает причину. – JMac

ответ

4

syntax.id содержит синтаксис для «простых» значений, то есть он не устанавливает ограничений на тип значения.

В общем, когда вы импортируете синтаксис для выражения вида x.op, место для импорта синтаксиса зависит от типа x, потому что op должна быть действительной операцией на этом типе.

Поскольку \/[A, B] повсеместно количественно для А и В, с использованием синтаксиса x.left и x.right места без ограничений на тип x. Следовательно, он принадлежит syntax.id.

Для понимания того, какой синтаксис доступен там, стоит посмотреть на источник некоторых модулей, составляющих пакеты syntax. Например, контраст IdOps[A], который имеет синтаксис для любого A, с FunctorOps[F[_],A], который имеет требование, что F является Functor.


Я не уверен, где название происходит от id точно; возможно, он связан с тождественным функтором Id, который может быть определен как type Id[A] = A. Если вам нужно было выбрать ограничение типа для значений, которые можно использовать с syntax.id, это будет то, что они находятся в Id. Будучи универсально квантифицированным в A, операции не могут знать о структуре значения A, поэтому они не могут быть структурными изменениями на A.

+0

Это может быть не более 100% правильным для последней версии Scalaz. Конечно, scalaz.syntax.id.right устарел в пользу scalaz.syntax.either.right – Caoilte

2

С scalaz 7 правильный импорт:

import scalaz.syntax.either._ 
Смежные вопросы