在Haskell中初始化一个记录时,我可以 * 强制只使用关键字 * 吗?
data Person
= Person
{
name :: String,
idnum :: String
}
deriving( Show )
main = putStrLn $ show $ Person "oren" "9200"
-- I want to only allow such initializations:
-- main = putStrLn $ show $ Person { name = "moish", idnum = "7400" }
(This在两个字段具有相同类型时特别有用)
1条答案
按热度按时间unhi4e5o1#
据我所知,没有。
也许可以考虑以下解决方案?
另一种可能性,在我看来更糟的是:
在这种情况下,不能保证
name
和idnum
都得到一个值。Person
总是可以作为一个“普通函数”使用,这一点可能会非常有用。例如,如果你有getName :: IO String
和getIdnum :: IO String
,那么把它们组合起来形成一个getPerson :: IO Person
是简洁的:getPerson = Person <$> getName <*> getIdnum
。这是唯一可能的,因为我们 * 不 * 使用记录语法在这里!