次のコードでは、関数 storePhone が Int を保存する電話番号の種類 (HomePhone または WorkPhone) を指定するにはどうすればよいですか?
type HomePhone = Int
type WorkPhone = Int
data Phone = HomePhone
| WorkPhone
storePhone :: int -> Phone
storePhone num = num
main :: IO ()
main = print $ storePhone 12345678
この質問は、私が行っているサイド プロジェクトに対する質問の簡略版です。ファイルを関連するデータ型に解析するモジュールがあります (サンプルの電話型のように)。すべてのデータは Double ですが、セマンティックな意味が異なります。別のモジュールには、データを使用するメソッドがあります。各メソッドは、引数としてデータ型 (別名 HomePhone、WorkPhone) の異なる順列を取ります。HomePhone と WorkPhone のデータ型、さらには newtype を作成することもできましたが、データを使用するメソッドがパターン マッチングなどでごちゃごちゃに見えてしまいます。それで、データ型(別名電話)を単純化して、もう少しエレガントでタイプセーフにすることができるかどうか疑問に思っていました。乾杯!私は次のことをするべきだと思いますか?
type HomePhone = Int
type WorkPhone = Int
data Phone = HomePhone HomePhone
| WorkPhone WorkPhone