次のように適用できる関数の定義を考え出そうとしています:
setProperty Left 45 Px
setProperty Position Absolute
setProperty Visible True
私が試したGADTs
:
data StyleUnit = Px | Pct | Em
data PositionP = Absolute | Relative | Static
data Property a where
Position :: Property PositionP
Left :: Property (Integer -> StyleUnit)
Visible :: Bool
次の署名を使用します。
setProperty :: Property a -> a -> IO ()
残念ながら、これはうまくいかないようです。これはまったく達成可能ですか、または などの特殊な関数バージョンを用意した方がよいsetPropertyPosition
でしょsetPropertyLeft
うか?