module Concat () where

import Language.Haskell.Liquid.Prelude

foo :: [Int]
foo = [choose 1, choose 2]

-- myconcat1 :: (a -> a) -> [[Int]] -> [Int] 
-- :: a goes to False -> safe
myconcat1 :: (a -> [(k,v)]) -> [a] -> [(k, v)]
myconcat1 _ []     = []
myconcat1 f (x:xs) = (f x) ++ (myconcat1 f xs) 

r :: Int
r = 5

prop (x, y) = liquidAssertB (x > r)
--  where r = 5
-- this is safe
propC = map prop $ myconcat1 (\x->[(x, x)]) foo