如何在Haskell中为数据结构创建默认值

时间:2019-04-20 20:20:12

标签: haskell

我有一个像这样的数据结构

data Sample = Sample { a :: String , b :: String } 

和一个函数

mkSample :: String -> String -> Sample
mkSample a b = Sample a b 

我想为a,b提供一些默认值,以防调用函数不提供它们,例如

mkSample :: String -> Sample
mkSample a = Sample a "test"

1)我觉得这个解决方案并不优雅,我还有什么其他选择。 2)如何为b创建一个mkSample,因为类型与a相同。

2 个答案:

答案 0 :(得分:6)

data Sample = Sample { a :: String , b :: String } 
defaultSample :: Sample
defaultSample = Sample "test" "value_b"

然后您可以使用记录语法:

let mySample = defaultSample { b = "custom value" }
...

答案 1 :(得分:2)

Maybe是针对这种情况而设计的:

mkSample :: Maybe String -> Maybe String -> Sample
mkSample ma mb = Sample (maybe "default a" id ma) (maybe "default b" id mb)
-- NB: maybe :: b -> (a -> b) -> Maybe a -> b

这样,如果没有可用的字符串,您可以只提供一个Nothing

λ> mkSample Nothing (Just "World!")
Sample "default a" "World!"
λ> mkSample (Just "Hello,") Nothing
Sample "Hello," "default b"
λ> mkSample Nothing Nothing
Sample "default a" "default b"