euclidean x y | y == 0 = x
| otherwise = let (b,q) = divMod x y
in if q == 0 then y else euclidean y q

こういうのをごっちゃごっちゃにならんようにポイントフリーにできないものかね?
なんかfold f . unfold gの形(hylomorphismってやつ?)で表現できそうな気はするんだけども…
安直にlast . unfoldr fでやるとfがMaybe(Maybe a)みたいなものを返す必要がでてきて
あまり綺麗にならんのよ.