I think it is simpler to use the Maybe type for this. If you only search for ternary relations, you can write a function, which only converts a list to a 3-tuple if it is of length three and otherwise it returns nothing. Then with catMaybes :: [Maybe a] -> [a], you can convert it back to a list with only 3-tuples.
import Data.Maybe
getLengthThree = catMaybes . fmap toTup
where toTup (x:y:z:[]) = Just (x,y,z)
toTup _ = Nothing