testIsListPropertyies :: forall collection
                       . ( IsList collection, Eq collection, Show collection
                         , Typeable collection, Typeable (Element collection)
                         , Element collection ~ Item collection
                         , Eq (Item collection), Show (Item collection)
                         )
                      => Proxy collection
                      -> Gen (Element collection)
                      -> Test
testIsListPropertyies proxy genElement = Group "IsList"
    [ Property "fromList . toList == id" $ withElements $ \l -> (toList $ fromListP proxy l) === l
    ]
  where
    withElements f = forAll (generateListOfElement genElement) f
testIsListPropertyies :: forall collection
                       . ( IsList collection, Eq collection, Show collection
                         , Typeable collection, Typeable (Element collection)
                         , Element collection ~ Item collection
                         , Eq (Item collection), Show (Item collection)
                         )
                      => Proxy collection
                      -> Gen (Element collection)
                      -> Test
testIsListPropertyies proxy genElement = Group "IsList"
    [ Property "fromList . toList == id" $ withElements $ \l -> (toList $ fromListP proxy l) === l
    ]
  where
    withElements f = forAll (generateListOfElement genElement) f
testIsListPropertyies proxy genElement = Group "IsList"
    [ Property "fromList . toList == id" $ withElements $ \l -> (toList $ fromListP proxy l) === l
    ]
  where
    withElements f = forAll (generateListOfElement genElement) f