Обычно я большой поклонник очень общего кода, но на самом деле я нахожу эту точную функцию достаточно полезной, специализированной для Maybe
, поэтому я использую ее вместо использования guard
, mfilter
и как.
Имя, которое я использую для этого, - justIf
, и я обычно использую его для таких вещей:
∀x. x ⊢ import Data.List
∀x. x ⊢ unfoldr (justIf (not . null . snd) . splitAt 3) [1..11]
[[1,2,3],[4,5,6],[7,8,9]]
По сути, вещи, в которых требуется некоторая поэлементная фильтрация или проверка в составном выражении, поэтому для указания результата предиката используется Maybe
.
Для такой специализированной версии вы действительно мало что можете сделать, чтобы сделать ее короче. Это уже довольно просто. Существует тонкая грань между лаконичностью и просто игрой в ваш код для подсчета символов, и для чего-то такого простого, я бы не стал беспокоиться о том, чтобы попытаться «улучшить» его ...