일부 컨테이너는 매우 유사한 기능 세트를 가지고 있다는 것을 알게되었습니다. List, Set, Sequence, Text 및 Bytestring을 예로들 수 있습니다. 왜 그들이 하나 이상의 공통 typeclasses를 사용하지 않는지 궁금합니다.컨테이너 유형에 대한 typeclass가없는 이유는 무엇입니까?
답변
실제로는 귀하의 복제본 인 질문은 Making a single function work on lists, ByteStrings and Texts (and perhaps other similar representations)입니다.
별도의 패키지에 포함되어있는 주된 이유는 기능적 종속성 또는 형식 계열 중 하나 인 언어 확장이 필요할 가능성이 높기 때문일 수 있습니다. 우리는 어떻게 든 Text
만 Char
의, ByteString
만 Word8
의를 포함 할 수 있습니다를 포함 할 수있다 '라고해야, []
는 모든 유형을 포함 할 수 있으며 Set
는 Ord
의 인스턴스를 포함 할 수 있습니다. 추천 목록
그들이 갖고있는 공통 기능 세트는 무엇입니까? AFAICS, 하나의 컨테이너에 여러 컨테이너를 결합하고 빈 컨테이너를 생성하는 기능. 그리고 실제로, 그들은 정확히 그 인터페이스를 제공하는 모두 Monoid
입니다!
일부는 다형성을 갖기 때문에 이러한 모든 작업을 수행 할 수 없습니다. 일부는 단일형입니다.
다형성 기, Sequence, Maybe 및 Map는 Functor, Foldable 및 Traversable typeclasses의 인스턴스이다.
오드 인스턴스가 불가능한 다른 사람을 정의 할 수 있습니다 당신이 만 Foldable이 Set를 들어(당신은 펑터의 법을 순종하는) fmap
(Data.Set.map을 정의 할 수 있지만 인수에 오드 인스턴스를 필요로 서명입니다).
앞서 언급했듯이 텍스트 및 바이트 스트링은 정의 된 유사한 유형 클립의 인스턴스가 될 수 있지만 기능 종속성이나 유형 계열이 필요합니다.
[Set _is_ monoid] (http://hackage.haskell.org/packages/archive/containers/0.5.2.1/doc/html/src/Data-Set-Base.html#line-231) :이 클래스에는 다형 함수/포함 된 유형이 인스턴스 헤드에서 고정되어 있지만, 거기에 모노 형태 컨테이너로 작동합니다. - 덧붙여 말하자면, [Functor/Applicative/Monad로 만들 수있는] 영리한 방법이 있습니다 (http://copilotco.com/mail-archives/haskell-cafe.2007/msg00051.html). GADT에서 Ord 인스턴스를 바인딩해야합니다. – leftaroundabout
사실, 좋은 지적. – phadej
세트 앤 Functor에 대한 추가 정보 : http://dorchard.wordpress.com/2011/10/18/subcategories-in-haskell-exofunctors/ – phadej
- 1. 지정된 컨테이너 유형의 반복자 유형에 대한 부분 전문화
- 2. Java 표준 라이브러리에 스택 컬렉션 유형에 대한 인터페이스가없는 이유는 무엇입니까?
- 3. 스칼라에서 특정 컨테이너 유형에 메서드를 정의하는 방법은 무엇입니까?
- 4. 텍스트가 컨테이너 외부에 나타나는 이유는 무엇입니까?
- 5. 자신의 서비스 - 유형에 대한 서비스는
- 6. Seq.concat 유형에 플렉시블 유형이 포함되는 이유는 무엇입니까?
- 7. 일류 함수의 유형에 바이어가 포함되어있는 이유는 무엇입니까?
- 8. 컨테이너 할당자가 할당하는 유형을 지정해야하는 이유는 무엇입니까?
- 9. 클래스 유형에 대한 포인터
- 10. 이미지가 컨테이너 아래쪽에 붙어있는 이유는 무엇입니까?
- 11. 요소가 컨테이너 아래쪽에 배치되지 않는 이유는 무엇입니까?
- 12. 해시 유형에 대한 레일 테스트
- 13. 이미지 유형에 대한 게터 설정 메소드는 무엇입니까?
- 14. 하스켈에서 상위 등급 유형에 대한 용도는 무엇입니까?
- 15. 입력 데이터 파일 유형에 대한 옵션은 무엇입니까?
- 16. Titan의 데이터 유형에 대한 모범 사례는 무엇입니까?
- 17. enum 유형에 대한 맵을 만드는 방법은 무엇입니까?
- 18. LDAP 유형에 대한 데이터 소스 URL은 무엇입니까
- 19. 개체 유형에 대한 클래스를 만드는 방법은 무엇입니까?
- 20. 값 유형에 대한 혼동
- 21. 컬렉션 유형에 대한 추상화
- 22. 소수 유형에 대한 규약
- 23. 레이아웃 유형에 대한 도움말
- 24. 내부 유형에 대한 액세스
- 25. 객체 유형에 대한 포인터
- 26. 하위 유형에 대한 테이블 관계
- 27. 컨테이너 클래스에 대한 지연로드를 구현하는 방법은 무엇입니까?
- 28. 컨테이너 란 무엇입니까? 웹 컨테이너, JSP 컨테이너 또는 스프링 컨테이너?
- 29. 스레드간에 전달되는 유형에 대한 dlang 상속 디자인
- 30. C의 표준 유형에 대한 typedef에 대한 권장 접근법은 무엇입니까?
사실 그들은 그렇습니다. 그러나 "공통 typeclasses"목록은 일반적으로 "Monoid", "Functor"및 때때로 "ListLike"로 제한됩니다. 다른 클래스가 존재하지 않거나 충분히 공통적이지 않기 때문입니다. – Yuras
그건 그렇고, 모든 것들을 추상화하는 방법을 발견 한 라이브러리에 대한'lens' 패키지를보십시오. 하지만 새로운 타입 매스터클을 사용하면 생각할 수있는 방법이 아닙니다. – Carl
@Yuras - 컨테이너는 Traversable 및 Foldable을 지원해야합니다 (또는하지 않는 것이 좋은 이유가 있음). –