1

この質問がよく考えられていないように思われる場合は申し訳ありませんが、Haskell で次のようなものに対して一貫したセマンティクスを定義できるかどうか疑問に思っていました。

derive Num String from Int where
    get = read
    set = show

derive Ord Bool from Integer where
    get = fromEnum
    set = toEnum

derive (Monad, Functor) Maybe from [] where
    get (Just x) = [x]
    get Nothing  = [ ]
    set [x]      = Just x
    set [ ]      = Nothing

そうしない理由はわかりません。状況によってはボイラープレートを削減するように思えますが、これを実装できるかどうか (もしそうなら、どれほど簡単か) はわかりません。

編集:

私の意図は、たとえば最初の例を次のようなものに置き換えることです。

instance Num String where
    get = read :: String -> Int
    set = show :: Int    -> String
    a + b = set $ get a + get b
    a * b = set $ get a * get b
    ...
4

1 に答える 1