上位概念: Haskell

Linear HaskellIOモナドメタプログラミングの一種である

https://twitter.com/hisaketM/status/1633054219191341058

IOモナドはある種のメタプログラミング、わかりやすい視点だと思うのだがあまりメタプログラミングという語を使って説明しているのを見たことがない

副作用のあるプログラムを書く(生成する)、副作用のないプログラム

このツイートを見てmain :: IO ()の意味がよく理解できた。haskellプログラムは副作用のあるプログラムを出力するのでmainの型がIO ()なのである。