liquidhaskell-0.8.10.7: tests/synthesis/TODO/ListConcat.hs
{-@ LIQUID "--typed-holes" @-}
module ListConcat where
import Language.Haskell.Liquid.Synthesize.Error
{-@ measure length' @-}
{-@ length' :: [a] -> Nat @-}
length' :: [a] -> Int
length' [] = 0
length' (x:xs) = 1 + length' xs
{-@ measure sumLen @-}
{-@ sumLen :: [[a]] -> Nat @-}
sumLen :: [[a]] -> Int
sumLen [] = 0
sumLen (x:xs) = length' x + sumLen xs
{-@ append0 :: xs: [a] -> ys: [a] -> {v: [a] | length' v == length' xs + length' ys} @-}
append0 :: [a] -> [a] -> [a]
append0 [] ys = ys
append0 (x:xs) ys = x:append0 xs ys
{-@ concat0 :: x: [[a]] -> { v: [a] | length' v == sumLen x } @-}
concat0 :: [[a]] -> [a]
concat0 = _goal
-- concat0 x =
-- case x of
-- [] -> []
-- x3:x4 -> append0 x3 (concat0 x4)