복붙노트

[SCALA] Scalaz 귀속 [서열] typeclass

SCALA

Scalaz 귀속 [서열] typeclass

나는 현재 Scalaz 스타일의 전통적인 스칼라에서 일부 코드를 포팅하고 있습니다.

그것은 내 노출 API 서명이 아닌 구체적인 유형을 직접 (즉, 목록, 벡터)의 서열의 특성을 사용하려면 코드의 대부분을 통해 매우 일반적이다. 이 바인드 [서열] typeclass의 구현을 제공하지 않기 때문에, 이것은 Scalaz 몇 가지 문제가있다.

즉이 제대로 작동합니다.

List(1,2,3,4) >>= bindOperation

그러나 이것은하지 않습니다

Seq(1,2,3,4) >>= bindOperation

에러에 실패하면 파라미터 F0 암묵적 값 찾을 수 없습니다 scalaz.Bind [서열]를

그러나 선행하는 방법에 대한 구성 / 모범 사례에 대해 확실하지 오전 - 나는 이것이 Scalaz에서 의도적 인 디자인 결정입니다 가정합니다.

내가 대신 더 유연한 서열 인터페이스를 사용하는 대신 적절한 목록 / 벡터 직접 내 코드를 작성해야 하는가? 아니면 단순히 [서열] typeclass 내 자신의 바인딩을 정의해야합니까?

해결법

  1. ==============================

    1.컬렉션 라이브러리는 하위 유형 수용 할 수 backflips을 수행 특정 콜렉션 유형 (등 목록,지도,)에지도를 사용할 때, 당신은 (일반적으로) 동일한 유형의 다시를 얻을 수 있습니다. 그것은 CanBuildFrom 같은 유형의 클래스와 매우 복잡한 상속 계층 구조의 함께의 사용을 통해이를 관리합니다. 그것은 일을 (적어도 틀림없이) 도착하지만, 복잡성은 매우 원칙적인 생각하지 않습니다. 그것은 엉망입니다. 많은 사람들이 그것을 싫어.

    컬렉션 라이브러리는 하위 유형 수용 할 수 backflips을 수행 특정 콜렉션 유형 (등 목록,지도,)에지도를 사용할 때, 당신은 (일반적으로) 동일한 유형의 다시를 얻을 수 있습니다. 그것은 CanBuildFrom 같은 유형의 클래스와 매우 복잡한 상속 계층 구조의 함께의 사용을 통해이를 관리합니다. 그것은 일을 (적어도 틀림없이) 도착하지만, 복잡성은 매우 원칙적인 생각하지 않습니다. 그것은 엉망입니다. 많은 사람들이 그것을 싫어.

    복잡성은 아주 쉽게 라이브러리 사용자로 피할 일반적이지만, 라이브러리 디자이너는 악몽이다. I 서열에 대한 모나드 인스턴스를 제공하는 경우, 그 수단 내 사용자의 모든 유형의 서열에 그들이 모나드 작업을 사용하여 모든 유형의 계층 구조를 승진 얻을.

    Scalaz의 사람들은 당신은 예를 들어, 메일 링리스트에이 결정의 논의를 볼 수 있도록 계층 구조 목록, 벡터 등의 잎 주위의 대부분의 Scalaz의 숙박을 위해, 어쨌든, 매우 하위 유형처럼하지 않는 경향이있다.

    내가 처음 사용하기 시작하면 Scalaz 나는 등 서열에 대한 인스턴스를 제공하고 그들이 CanBuildFrom와 함께 사용할 수 있도록 노력 유틸리티 코드를 많이 썼다. 그럼 난 중단, 지금은 오직 내 자신의 코드에 목록, 벡터,지도 및 설정을 사용하여 Scalaz을 따라하는 경향이있다. 당신이 "Scalaz 스타일"에 최선을 다하고 있다면, 당신은뿐만 아니라 그렇게 할 (또는 Scalaz 자신의 IList의, ISET, == >> 등을 채택)해야한다. 당신은하지만, 더 일반적으로 모범 사례에 대한 명확한 합의를 찾을 않을거야, 당신은 당신이 선호하는 찾기 위해 실험을해야하므로 두 가지 접근 방식이 작동하도록 만들 수 있습니다.

  2. from https://stackoverflow.com/questions/24753526/scalaz-bindseq-typeclass by cc-by-sa and MIT license