Haskell知らないけど。foldってリストに対してのループ処理だろう?
foldとか使わなくても、先頭から1つずつ取り出して一致を調べるだけで、全く使わなくても出来るんじゃないか?
使わないといけないっていう絞り?