2012-03-25 4 views
9

QuickCheck을 사용하여 순수 코드를 테스트하려는 경우 종종 Arbitrary 인스턴스를 작성해야합니다. 모나드 코드를 테스트하려면이 article에 설명 된대로 Test.QuickCheck.Monadic을 사용할 수 있습니다.QuickCheck와 함께 사용할 임의의 모나드 버전이 있습니까?

내 질문은입니다. 모나드 컨텍스트에 따라 데이터를 생성 할 수있는 표준적인 방법이 있습니까? 특히 임의의 모나드 버전이 있습니까? 모나드 컨텍스트가 필요한 데이터를 생성하는 방법은 무엇입니까?

답변

3

무작위로 그냥 적절한 임의 모나드 컨텍스트를 생성 문맥

를 생성합니다. 테스트를 실행 중이라면 순수 가상의 모나드 랜드에 머물러서는 안됩니다. 실제로 테스트하려면 특정 모나드를 선택해야합니다. 리스트 모나드를 고르셨습니까? 문맥으로서리스트를 무작위로 생성하십시오. 국가 모나드? 문맥에 대한 상태 유형의 값을 무작위로 생성하십시오. 작가? 무작위로 로그를 생성하십시오.

무작위로 정확히

그래서 당신이 생성 할 않는 동작을 생성? 모나드 액션 인 경우 고유 한 프리미티브을 기반으로 특정 모나드에 모나드 액션 을 생성하는 방법을 제공해야합니다. 예 : 랜덤하게 생성 된 상태 액션은 상태 프리미티브 getput에서 임의로 생성되어야합니다.

것은 당신이 모나드 조치를 생성하는 기능 f을 생성하는 QuickCheck의 기능을 사용하는 경우 함께

을 담아 및 컨텍스트 c를 생성하는 QuickCheck를 사용하여, 당신은 단순히 c >>= f 그들을 함께 넣어 수 있습니다. 또는 단순히 a 작업을 직접 생성하고 c >> a을 수행 할 수 있습니다.

6

Gen은 기본적으로 Arbitrary 유형 클래스가 Gen a 발전기의 제공자이기 때문에 Arbitrary 인스턴스를 모나드 프레임 워크에서 사용하는 것입니다.