on master help sign in
Total List.transpose
commit3c8f2d6984b042875ef14b1173019e29c60c717a authorAndy Caldwell <andrew.caldwell@metaswitch.com> dateTue 6 Nov 2018, 20:34 (8 years ago) parent8362faa
1 file changed+4−4
libs/prelude/Prelude/List.idr+4−4
libs/prelude/Prelude/List.idr+4−4
@@ -436,12 +436,12 @@ intercalate sep xss = concat $ intersperse sep xss
436436|||
437437||| transpose [[], [1, 2]] = [[1], [2]]
438438||| transpose (transpose [[], [1, 2]]) = [[1, 2]]
439−|||
440−||| TODO: Solution which satisfies the totality checker?
441439transpose : List (List a) -> List (List a)
442440transpose [] = []
443−transpose ([] :: xss) = transpose xss
444−transpose ((x::xs) :: xss) = assert_total $ (x :: (mapMaybe head' xss)) :: (transpose (xs :: (map (drop 1) xss)))
441+transpose (heads :: tails) = spreadHeads heads (transpose tails) where
442+ spreadHeads [] tails = tails
443+ spreadHeads (head :: heads) [] = [head] :: spreadHeads heads []
444+ spreadHeads (head :: heads) (tail :: tails) = (head :: tail) :: spreadHeads heads tails
445445
446446--------------------------------------------------------------------------------
447447-- Membership tests