Это не совсем ответ, но мне нужно было отформатировать.
N.B.: mifun
- это ⊥, если какой-либо из содержащихся списков пуст. Например:
> mifun [[3], [5, 8], [], [1, 2, 3]]
*** Exception: Prelude.head: empty list
Если вы хотите, чтобы результатом приведенного выше примера было 9 (трактовать пустой список как не вносящий вклад в сумму), то вам следует определить op одним из следующих способов:
mifun s = foldr op 0 s
where op [] r = r
op (x:_) r = x + r
mifun s = foldr op 0 s
where op x r = (if null x then 0 else head x) + r
mifun s = foldr op 0 s
where op x r = sum (take 1 x) + r
Я бы предпочел первое.