В настоящее время я имею дело с функцией, которая выглядит следующим образом:
foo = (\(a:b:c:d:e:f:_) -> foobar a b c d e f) . (++ repeat def)
Другими словами, учитывая список, он использует первые шесть элементов для чего-то, и если список меньше шестиэлементы длиной, он использует def
в качестве замены для отсутствующих. Это полная сумма, но ее части нет (как и map fromJust . filter isJust
), поэтому мне это не нравится. Я попытался переписать это так, чтобы он не нуждался в какой-либо пристрастности, и получил это:
foo [] = foobar def def def def def def
foo [a] = foobar a def def def def def
foo [a,b] = foobar a b def def def def
foo [a,b,c] = foobar a b c def def def
foo [a,b,c,d] = foobar a b c d def def
foo [a,b,c,d,e] = foobar a b c d e def
foo (a:b:c:d:e:f:_) = foobar a b c d e f
Я технически сделал то, что хотел, но теперь это гигантский беспорядок. Как я могу сделать это более изящным и менее повторяющимся способом?