入出力や状態は具体的にどのように扱えばいい?
参照透明性を失わずにする方法があるって聞いたけど
他の関数型言語では何やらそういう仕組みが備わっているみたいだし。

例えばユーザーから1〜3を選んでもらって、それに応じて処理を変えるみたいの出来る?
無理じゃない?