如果我在ghci中输入":i Double"或":i Float",则表示Double和Float是Fractional的实例.但是在Haskell文档中,它说它们不是.那么他们是不是? http://hackage.haskell.org/package/base-4.9.1.0/docs/Prelude.html#t:Fractional
我正在尝试实现数据类型的show方法.
data OptionList a b = EmptyOpt | OptionList { optListHead :: a, optListTail :: b } deriving (Read)
instance (Show a, Show b) => Show (OptionList a b) where
show (OptionList a EmptyOpt) = "{" ++ (show a) ++"}"
show (OptionList EmptyOpt b) = "{" ++ (show b) ++"}"
show (OptionList a b) = "{"++ (show a) ++ ", " ++ (show b) ++"}"
show EmptyOpt = ""
Run Code Online (Sandbox Code Playgroud)
我希望OptionList不显示逗号,如果其中一个a
或b
具有由EmptyOpt构造的值.但编译器显示以下错误:
OptionList.hs:11:28:
Couldn't match expected type ‘b’ …
Run Code Online (Sandbox Code Playgroud) 我曾经问过一位老师为什么习惯将财产的可见性设定为私人或受保护的人.她回答我说这比公开更安全,但我对这个答案并不是很有信心.所以,我想知道,即使我确保最终用户无法操纵我的类,公共财产对于属性真的不太安全吗?为什么?
我有一个文件OptionList.hs,有一个名为OptionList的新数据类型.我想在显示OptionList时隐藏EmptyOpt:
module OptionList (
OptionList,
voidOption,
(+:)
) where
data OptionList a b = EmptyOpt | OptionList { optListHead :: a, optListTail :: b } deriving (Read)
instance (Show a, Show b) => Show (OptionList a b) where
show (OptionList voidOption a) = "{" ++ (show a) ++"}"
show (OptionList a voidOption) = "{" ++ (show a) ++"}"
show (OptionList a b) = "{"++ (show a) ++ ", " ++ (show b) ++"}"
show voidOption = ""
voidOption::(OptionList Int Int) …
Run Code Online (Sandbox Code Playgroud) "aoad"或"areturn"等JVM指令中的'a'是什么意思?我知道他们在引用上运行,但为什么它们被命名为'aload','astore'等而不是'rload','rstore'等?