TL;DR Freeモナドの合成はCoproductという型とInjectという型クラスを使うとできるよ! 詳しくはコードを見てね! https://github.com/goldarn-ring/how-to-compose-free-monad すごーい!君はDSLが得意なフレンズなんだね! 突然ですが、Freeモナドって便利ですよね! えっ、ご存知ではない? DSLを簡単に作れる便利なモナドですよ! 詳しくはこちら: Freeモナドって何なのさっ!? - capriccioso String Creating(Object something){ return My.Expression(something); } そろそろFreeモナドに関して一言いっとくか - fumievalの日記 DSLによるコードと、DSLの各命令の処理を切り離すことで、モック化とかDIとかが簡単にできるの