module ListClone () where
import Language.Haskell.Liquid.Prelude
make2d :: a -> Int -> Int -> [[a]]
make2d x n m = clone (clone x n) m
clone :: a -> Int -> [a]
clone x n
| n == 0
= []
| otherwise
= x : (clone x (n-1))
-- check [] = [liquidAssertB True]
-- check (xs:xss) = let n = length xs in map (\xs' -> liquidAssertB (length xs' == n)) xss
chk :: [[a]] -> Bool
chk [] = liquidAssertB True
chk (xs:xss) =
case xss of
(xs1:xss1) -> let n = length xs in liquidAssertB (length xs1 == n) && chk xss
[] -> liquidAssertB True
fooL = [[1, 1, 3], [2, 2, 5]]
fooL1 = let f = make2d n0 n1 n2 in f
where n0 = 0
n1 = 2
n2 = 3
propL = chk fooL1
prop = chk fooL