リストで最初にマッチした要素に処理をしたいです
foldではマッチ後も余分な計算が発生するので
次のような関数を考えたのですが
既に用意されてる関数を組み合わせてこういうの出来ないでしょうか
(言い換えると、List.anyで最初にtrueになった要素に処理したい)

--空リストがあるので、結果は仕方なく1要素からなるリスト
dofirst :: (t -> Bool) -> (t -> a) -> [t] -> [a]
dofirst pred f lst = case lst of
[] -> []
x:xs -> if pred x then
[f x]
else
dofirst pred f xs


result=dofirst (==20) (*2) [1..]