如何在haskell中为数据结构创建默认值
我有一个这样的数据结构如何在haskell中为数据结构创建默认值,haskell,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) 我觉得这个解决方案并不优
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的类型相同。
也许
非常适合这种情况:
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"
然后可以使用记录语法:
let mySample = defaultSample { b = "custom value" }
...
mkSample=flip Sample“test”
会更好吗?从根本上说,你不能提供一个参数,因为每个函数都只有一个参数,在Haskell中不可能调用一个没有参数的函数。谢谢,这很好,我试过了,但我想我会继续实现上面的解决方案,因为它对我的代码稍微好一点
let mySample = defaultSample { b = "custom value" }
...