コンパイル時にコンパイル時のキーを実行時の値にマップするマップを作成したいと思います。関数は、これらのキーをチェックし、必要なキーがすべて存在しない場合はコンパイラエラーをスローできる必要があります。
これは大まかに私が達成したいことです:
class HasFirst a
first :: String
class HasMiddle a
middle :: String
class HasLast a
last :: String
print_full_name :: (HasFirst a, HasLast a) => a -> String
addFirst :: String -> a -> b
addFirst s x = -- ( Add a first name to x )
emptyName :: -- some empty name
x1 = addFirst "John" $ addLast "Smith" $ emptyName
x2 = addMiddle "Bob" $ addLast "Smith" $ emptyName
main = putStr $ print_full_name x1 -- Compiles
main = putStr $ print_full_name x2 -- No first name so compile error
C ++の知識がある人のために、私は大まかにboost ::fusion::mapが何をするのかを知りたいです。
上記のコードは必ずしも必要ではありません。コンパイル時にパラメーターを確認できることが重要です。メカニズムがクラスであろうと他の何かであろうと、私は気にしません。
これを行うパッケージはありますか、それともこれを開発するのは簡単ですか?