2011-02-18 6 views
2

모나드 데이터 타입을 디자인하는 데 약간의 도움이 필요할 것입니다. 아이디어에 머리를 감싸는 데 어려움이있는 것 같지만, 원하는 것을 확실히 알고 있습니다. 그 유형 검사관 만이 그 문제에 대해 어떤 설득을 요구합니다.모나 딕 (monadic) 타입 디자인하기

내가 원하는 것은 모나드가 될 수있는 데이터 유형 Primitive입니다. 그 함수는 기본적으로 드로잉 프리미티브이며, parsec 라이브러리의 Parser 유형과 마찬가지로 프리미티브가되는 조합과 조합을 결합 할 수 있기를 원합니다. 그러나 실제 드로잉은 IO 모나드로 수행되어야합니다.

는 덧붙여, 나는 또한이 같은 클래스 Drawable a 있습니다

class Drawable a where 
    draw :: (MonadIO m) => Pos -> a -> m() 

그리고 당김 수 물론 모든 원시를 원한다. 모든 입력에 감사드립니다.

+2

http://lukepalmer.wordpress.com/2008/07/18/semantic-design/ 주소이 :

덧붙여, 브렌트의 다이어그램 라이브러리는 좋은 아이디어를 제공 할 수있는 아주 좋은 작곡 API가 있습니다. – Peaker

+0

+1 Peaker. 최고 기사. – identity

+0

'draw' 메소드는 실제로 나에게 의미가 없습니다. 대신이 형식 시그니처 인'draw :: Pos -> a -> IO()'를 선택하겠습니다. 왜 유닛을 제외한 모든 것을 반환 할 것인가 ... 그냥 출력 함수가 아닌가? –

답변

5

왜 이것이 모나드라고 생각하는지 이해가되지 않습니다. 그것에 대해 모나드가 무엇입니까?

먼저 원하는 API를 디자인하고이를 추상화하는 방법에 대해 점진적으로 생각해야합니다. http://byorgey.wordpress.com/2008/04/30/new-haskell-diagrams-library/

+1

나는 이것에 대해 살펴 보았다. 그리고 그것은 나의 첫 번째 아이디어와 매우 흡사하다 : 재귀적인 데이터 타입을 만든다. 하지만 Primitive는 초당 여러 번 그려지기 때문에 라이브러리에서와 같이 한 번만 그려지는 것이 아니기 때문에 필자는 원시 타입을 즉시 그리기를 원하기 때문에 그것에 반대합니다. 복잡한 데이터 유형이 그려 질 때마다 만들어지면 상당한 오버 헤드가 될 수 있습니다. – Lanbo

+0

이것은 Cairo Haskell API와 매우 흡사합니다. 그것 좀보세요. –

+0

카이로 참고서를 답으로 써서 나는 그것을 체크 할 수 있기를 바랍니다. 감사! – Lanbo

관련 문제