2012-04-26 2 views
2

내 프로그램에서 Data.List.Vector를 사용 중입니다. 이제 quickCheck를 사용하고 싶습니다. 그러나, 거기에 대한 인스턴스가 없습니다. 이미 [더블]에 대한 임의의가 있기 때문에, 나는 내가 좋아하는 일을 할 수 있다고 생각Data.List.Vector를 임의의 멤버로 쉽게 만드는 방법은 무엇입니까?

instance Arbitrary V.Vector Double where 
    arbitrary = V.fromList (arbitrary :: [Double]) 

아아, GHC은이 모든 것을 좋아하지 않는다 :

`Arbitrary' is applied to too many type arguments 
In the instance declaration for `Arbitrary V.Vector Double' 

을 나는 또한 단지를 만들 수있는 것 같아요 [Double]을 취하고 V.fromList를 사용하는 속성 집합이지만 지루한 것처럼 보입니다. ,

instance (Arbitrary a) => Arbitrary (V.Vector a) where 
    arbitrary = fmap V.fromList arbitrary 

참고가 fmaparbitrary 때문에 유형 Gen a의 값이 필요합니다

답변

8

귀하의 문제는, instance Arbitrary (V.Vector Double)처럼, 그것을 괄호로해야하는 등 그러나 그것을 할 수있는 더 좋은 방법이 있다는 것입니다 따라서 Gen [a]에서 Gen (V.Vector a)으로 이동하려면 V.fromListGen으로 들어야합니다.이 기능은 Functor이므로 수행 할 수 있습니다.

관련 문제