import Data.List
f :: [a] -> [([a], a, [a])]
-- f xs = fmap go $ init $ zip (inits xs) (tails xs)
-- f xs = init $ fmap go $ zip (inits xs) (tails xs)
-- f xs = init $ zipWith (curry go) (inits xs) (tails xs)
-- f xs = zipWith (curry go) (inits xs) (init (tails xs))
f xs = zipWith (curry go) (init (inits xs)) (tails xs)
where
go (y, ys) = case ys of
z : zs -> (y, z, zs)
[] -> error "Error"