多くのプログラミング言語が用途を限定しない汎用の言語として設計されているのに対して、領域特化言語(ドメイン固有言語, domain-specific language, DSL)は何らかの目的に特化して設計された言語のことをいいます。領域特化言語を導入する利点のひとつは、プログラムの各部分の役割が明確になり、ソフトウェア全体の設計がよりわかりやすくなるというものがあります。たとえば、ゲームソフトウェアではゲームの描画とゲームの状態更新は完全に分離されているべきです。ゲームで一時的に処理が重くなり、描画を何フレームかスキップして速度を維持したいとしましょう。もし状態更新と描画がきちんと分離されていなければ、描画だけをうまくスキップするということはできなくなってしまいます。もし描画専用の領域特化言語を導入すると、ソフトウェアのコードをその内容に沿って完全に分離するのを強制し、それに違反するよう
![Freeモナドで領域特化言語を作るとプリティミューテーション - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/940a55c5de3227619fd76582af5bd706b66c133f/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9RnJlZSVFMyU4MyVBMiVFMyU4MyU4QSVFMyU4MyU4OSVFMyU4MSVBNyVFOSVBMCU5OCVFNSU5RiU5RiVFNyU4OSVCOSVFNSU4QyU5NiVFOCVBOCU4MCVFOCVBQSU5RSVFMyU4MiU5MiVFNCVCRCU5QyVFMyU4MiU4QiVFMyU4MSVBOCVFMyU4MyU5NyVFMyU4MyVBQSVFMyU4MyU4NiVFMyU4MiVBMyVFMyU4MyU5RiVFMyU4MyVBNSVFMyU4MyVCQyVFMyU4MyU4NiVFMyU4MyVCQyVFMyU4MiVCNyVFMyU4MyVBNyVFMyU4MyVCMyZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1jbGlwPWVsbGlwc2lzJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YjIyODEzMmFjNWNjNWJlY2E2Y2VhMWZiNDUxNmNiNTc%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwaGlydWJlcnV0byZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YWFjYTY4YjQ4MWNlOGY1NGYzYzNiNjQ0ZTY5ZmM5YWE%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D7b46ae83c2fbf4da1a77bdcbc35c3690)