グラフと次のような関数のセットがあるとしましょう。
create-node :: Graph -> (Graph, Node)
split-node :: Graph -> Node -> (Graph, Node, Node)
Graph
主に便宜上(できればモナドなしで、コードの一部を操作するすべてのグラフをモナドブロックでラップする必要がないように)、引数として期待しない関数のバージョンを作成したいと思います。では、これについてはどうでしょうか。
create-node :: (Graph -> (Graph, Node))
split-node :: (Graph -> Node) -> ((Graph -> Node), (Graph -> Node))
またはより一般的に:
fun :: (Graph -> Argument) -> ... -> (Graph -> Result)
(Graph -> ...)
そうすれば、通常のノードであるかのように値を使用できるようになります。最後に、(Graph -> ...)
値から実際のグラフを取得するには、それを空のグラフに適用するだけです。これは合理的なアプローチですか?