{-# LANGUAGE FlexibleInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module Data.GenValidity.Path where

import Data.GenValidity
import Data.Validity.Path ()
import Path
import Path.Internal
import Test.QuickCheck.Gen

instance GenValid (Path Abs File) where
  genValid :: Gen (Path Abs File)
genValid = (forall b t. [Char] -> Path b t
Path forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char
'/' forall a. a -> [a] -> [a]
:) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. GenValid a => Gen a
genValid) forall a. Gen a -> (a -> Bool) -> Gen a
`suchThat` forall a. Validity a => a -> Bool
isValid
  shrinkValid :: Path Abs File -> [Path Abs File]
shrinkValid (Path [Char]
s) = forall a. (a -> Bool) -> [a] -> [a]
filter forall a. Validity a => a -> Bool
isValid forall a b. (a -> b) -> a -> b
$ forall b t. [Char] -> Path b t
Path forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. GenValid a => a -> [a]
shrinkValid [Char]
s

instance GenValid (Path Abs Dir) where
  genValid :: Gen (Path Abs Dir)
genValid = (forall b t. [Char] -> Path b t
Path forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char
'/' forall a. a -> [a] -> [a]
:) forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. [a] -> [a] -> [a]
++ [Char]
"/") forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. GenValid a => Gen a
genValid) forall a. Gen a -> (a -> Bool) -> Gen a
`suchThat` forall a. Validity a => a -> Bool
isValid
  shrinkValid :: Path Abs Dir -> [Path Abs Dir]
shrinkValid (Path [Char]
s) = forall a. (a -> Bool) -> [a] -> [a]
filter forall a. Validity a => a -> Bool
isValid forall a b. (a -> b) -> a -> b
$ forall b t. [Char] -> Path b t
Path forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. GenValid a => a -> [a]
shrinkValid [Char]
s

instance GenValid (Path Rel File) where
  genValid :: Gen (Path Rel File)
genValid = (forall b t. [Char] -> Path b t
Path forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. GenValid a => Gen a
genValid) forall a. Gen a -> (a -> Bool) -> Gen a
`suchThat` forall a. Validity a => a -> Bool
isValid
  shrinkValid :: Path Rel File -> [Path Rel File]
shrinkValid (Path [Char]
s) = forall a. (a -> Bool) -> [a] -> [a]
filter forall a. Validity a => a -> Bool
isValid forall a b. (a -> b) -> a -> b
$ forall b t. [Char] -> Path b t
Path forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. GenValid a => a -> [a]
shrinkValid [Char]
s

instance GenValid (Path Rel Dir) where
  genValid :: Gen (Path Rel Dir)
genValid = (forall b t. [Char] -> Path b t
Path forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. [a] -> [a] -> [a]
++ [Char]
"/") forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. GenValid a => Gen a
genValid) forall a. Gen a -> (a -> Bool) -> Gen a
`suchThat` forall a. Validity a => a -> Bool
isValid
  shrinkValid :: Path Rel Dir -> [Path Rel Dir]
shrinkValid (Path [Char]
s) = forall a. (a -> Bool) -> [a] -> [a]
filter forall a. Validity a => a -> Bool
isValid forall a b. (a -> b) -> a -> b
$ forall b t. [Char] -> Path b t
Path forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. GenValid a => a -> [a]
shrinkValid [Char]
s