2011-09-19 3 views
7

방금 ​​hackage 패키지 OneTuple을 발견했습니다. 나는 그것의 목적을 알고 싶다, 나는 확실히 그것의 재미를 위해 그것을 만들지 않았다. 언제 이것이 유용 할 수 있습니까? 그것은 무엇을하는지는 분명하지만, 그것을 사용할 때는 아닙니다.언제 OneTuple을 사용하고 싶습니까?

그래서 누구나이 멋진 혜택을 누릴 수있는 멋진 사례를 알고 계십니까? 아니면 뒤에 수학적 아름다움을 보여?

+1

"저자가 재미있게 만들지 않았다고 확신합니다."- 하스켈 커뮤니티의 유머 감각을 과소 평가했을 수 있습니다. – MatrixFrog

+0

개구리가 말한 바. 기존 패키지의 실제 이유가없는 패키지의 예는 acme 패키지 카테고리를 참조하십시오. –

답변

3

OneTuple 그것이 부가 바닥 값을 가지는 대신 datanewtype의 사용 이후 거의 것을 제외하고는 일반적으로 모나드 변환기 스택의베이스로 사용된다 Identity 모나드, 동일이다.

그것이 의미하는 바는 구현하는 대부분의 유형 클래스 중 가장 간단한 예이기 때문에 흥미 롭습니다. 하지만 실용적이지는 않습니다.

+2

나는 간접적 인 계층을 추가로 만들 때만 실제적인 사용을 볼 수 있습니다. – fuz

2

나는 don't 패키지와 같이 농담으로 생각합니다. 즉, OneTupleMaybe과는 대조적으로 모든 유형에 하나의 새로운 값을 추가합니다 (보트가 어떻게 움직이는 지에 따라 NothingJust undefined 또는 undefined). 그래서 당신이 필요하다면, 어디를 가야하는지 알 수 있습니다.

+0

''don't '는 디버깅 목적으로는 꽤 유용합니다. 예를 들어 모나 딕 연산을 "주석 처리"하고 싶다면 말입니다. – fuz

+2

그 때문에'--' 연산자를 사용합니다 :-) – sclv

4

튜플에 대해 작동하는 (약간 어리석은) typeclass가 있다고 가정 해보십시오. (a,a)에 대한 인스턴스가 있고 (a,a,a)에 대한 인스턴스가 있습니다. 단일 값에 대한 인스턴스도 필요합니다. 그러나 다른 모든 것들과 겹치기 때문에 a에 대한 인스턴스를 만들 수는 없습니다! 그러나 OneTuple a에 대한 인스턴스를 만들 수 있습니다.

이제 typeclass는 쓸모가 없지만 거의 비슷한 typeclass를 상상하기 쉽습니다. http://hackage.haskell.org/packages/archive/mysql-simple/0.2.0.2/doc/html/Database-MySQL-Simple-QueryResults.html

3

이 신원 모나드 구현이 농담이 아닌 것처럼, 가장 확실하게 하지 농담입니다 : 사실, 이것은 BOS 'MySQL의 라이브러리에 Only의 사용은 정확하게이다. 일반 유형 a과 달리 모든 유용한 인스턴스를 얻습니다. 추가 바닥을 얻으면 싱글 톤 튜플을 다른 튜플 유형의 의미에 훨씬 가깝게 가져옵니다.

이 경우의 사용 사례는 신원 모나드와 마찬가지로 일반화입니다. 당신은 polymorphic functor 타입을 가진 응용/모나 딕 함수를 가지고 있습니다. 예를 들어 열거자인과 같은 유용한 패키지는 사용자가 선택한 모나드를 지원합니다. OneTuple의 약간 다른 의미 (Identity과 비교)는 데이터 종속성이 복잡하거나 추가 게으름을 원할 때 매우 유용 할 수 있습니다. Identity은이를 알려주지 않습니다.

관련 문제