前提 TaPL 読みながら Haskell/Denotational semantics 見て、自分なりに納得した己が解釈を文芸的に綴っていくだけの内容です 序: void, null, undefined, (), [], ⊥ どんな言語でも「空っぽ」なり「無い」なり「未定義」なりを意味する値が用意されており、型付けが動的だろうと静的だろうとこれらに対してだけはヤケに自由度の高い用法を許されています。 Haskell の undefined と ( ) 型 Haskellであっても、以下のコードは「正しく型づけされ、正しく動作する」としてコンパイルが通ります fib :: Integer -> Integer fib 0 = 1 fib 1 = 1 fib n | n > 1 = fib (n - 2) + fib (n - 1) | otherwise = undefined -- (
![Programming-language - なぜ null はそのプログラミング言語にあるのか(その1 - ”無”の無い世界) - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/967b1ad02305088ee0dc6c8102d1710dcc5b6af6/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-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUUzJTgxJUFBJUUzJTgxJTlDJTIwbnVsbCUyMCVFMyU4MSVBRiVFMyU4MSU5RCVFMyU4MSVBRSVFMyU4MyU5NyVFMyU4MyVBRCVFMyU4MiVCMCVFMyU4MyVBOSVFMyU4MyU5RiVFMyU4MyVCMyVFMyU4MiVCMCVFOCVBOCU4MCVFOCVBQSU5RSVFMyU4MSVBQiVFMyU4MSU4MiVFMyU4MiU4QiVFMyU4MSVBRSVFMyU4MSU4QiVFRiVCQyU4OCVFMyU4MSU5RCVFMyU4MSVBRTElMjAtJTIwJUUyJTgwJTlEJUU3JTg0JUExJUUyJTgwJTlEJUUzJTgxJUFFJUU3JTg0JUExJUUzJTgxJTg0JUU0JUI4JTk2JUU3JTk1JThDJUVGJUJDJTg5JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0yYzllYWE0MmUyYTVmNTU4MDFhYmI0ZDdmMDA5NTYzZA%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwVm9RbiZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9MTdiNTk5MjA0ZGIxZDdmOTkxZTljZTIxY2Y1YzgxNmI%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D47b1973b801c8dc186eb6d81504e653c)