
On 10/10/06, falseep@gmail.com
I'm trying to implement a function that returns the shorter one of two given lists, something like shorter :: [a] -> [a] -> [a]
However, it becomes difficult when dealing with infinite lists, for example, shorter [1..5] (shorter [2..] [3..]) Could this evaluate to [1..5]? I haven't found a proper implementation.
If you can figure out a solution that works for both "shorter [1..5] [2..]" and "shorter [2..] [1..5]", the essence of that solution will work to define a "shortest [[1..5],[2..],[3..]]" (leaving "shorter a b = shortest [a, b]"). As shown elsewhere in the thread, there is at least one solution with slightly different type signatures that works much like you want; something like: unFoo (shorter' (foo a) (shorter' (foo b) (foo c))) Colin