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] -&gt; [a], you can convert it back to a list with only 3-tuples. <br>

<br>import Data.Maybe<br><br>getLengthThree = catMaybes . fmap toTup<br>    where toTup (x:y:z:[]) = Just (x,y,z)<br>          toTup _ = Nothing<br><br>