我想在编译时创建一个映射,将编译时键映射到运行时值。如果并非所有必需的键都存在,函数应该能够检查这些键并引发编译器错误。
这大致是我想要实现的目标:
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的作用。
我不需要上面的代码,重要的是我可以在编译时检查参数。无论机制是类还是其他我不介意的东西。
是否有一个包可以做到这一点,或者开发它是否容易?