Avatar
むむ、それは論点がずれてると思います
2:34 PM
untagged unionかtagged unionかの違いは
2:34 PM
データ構造として、unionでマージしてる個別の要素を、型だけで区別するか、名前をつけて区別するかであって
2:34 PM
そのまとめた全体に名前をつけられるかどうか、は直交する話だと思います。
2:34 PM
つまり・・・
2:37 PM
untagged union: (FileIOError | NetworkError) ↓名前を付けたuntagged union DownloadError = (FileIOError | NetworkError) tagged union: (cacheFileIOError: FileIOError | downloadFileIOError: FileIOError | network: NetworkError) ↑taggedは、ケースにtagがついているので、FileIOErrorを2つ区別して保持できる tagged unionに名前が付けられる: ↓これの左辺の事 DownloadError = (cacheFileIOError: FileIOError | downloadFileIOError: FileIOError | network: NetworkError) (edited)
2:37 PM
Swiftのenumに関して言えば、 enum DownloadError // ←ここに名前がつくかどうかじゃなくて { case cacheFile(FileIOError) // ←このケースと case downloadFileIOError(FileIOError) // このケースが区別できるのがtag case network(NetworkError) } (edited)
2:38 PM
で、Swiftのタプルは、taggedな値の積なんじゃないかなと
2:43 PM
実際他の言語の例だとTypeScriptは名前が付けられるuntagged unionです https://github.com/ReactiveX/rxjs/blob/5.5.12/src/Observable.ts#L19 (edited)
A reactive programming library for JavaScript. Contribute to ReactiveX/rxjs development by creating an account on GitHub.
2:44 PM
(最新のmasterでその部分の設計が変わっていたので5系のリンクですが・・・) (edited)
2:45 PM
A reactive programming library for JavaScript. Contribute to ReactiveX/rxjs development by creating an account on GitHub.