{-# OPTIONS_GHC -Wall #-} main :: IO () main = pure () foo :: [Either a1 b] -> [a2] -> [a3] -> a4 foo [] _ _ = undefined foo (Left _ : _) ~(_a:_as) _ = undefined foo (Right _ : _) _ ~(_a:_as) = undefined foo _ _ _ = undefined