再帰しますよ

Haskellには、繰り返しの構文がないので、再帰で繰り返します。
再帰とは、自分で自分を呼んじゃいます。
ここでは、リストを反転させるreverse関数を作ってみましょう。ただ、reverse関数は、定義されているのでmyreverseになりますが。

myreverse [ ] = [ ]
myreverse ( x:xs ) = (myreverse xs ) ++ [x]

Haskellは引数で条件判断のようなことができます。上のmyreverseは、空のリストが来たら、それをそのまま返します。下のmyreverseは、リストの先頭と残りにわけ、最初に残りのリストにmyreverseを適用したものに、リストの先頭だけのリストを結合します。++はリストとリストを結合する演算子です。

もし、下のmyreverseだけだったら、ずっとループしてしまいますが、リストが空のときのmyreverseを定義することで、関数がどんどん適用されていくことになります。

再帰は終わらす定義が重要。じゃないと無限ループにはまってしまいます。