Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在haskell中为数据结构创建默认值_Haskell - Fatal编程技术网

如何在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" }
...