jsm*_*mrt 0 haskell types overloading
假设我想定义一个带有int和string的新类型.我知道要这样定义:
data Comp = Comp Int String
但这种表示法的问题是,当我有这种类型的实例时,实例的形式为:
Comp 45 "heloWorld"
我不希望这样,我想要数据类型的这些"参数"(更像是记录的条目),我希望它们以字符分隔,例如| 或#而不是空格.我不希望那个角色做任何事情,这只是我想要使用的符号.在这种情况下,
45#"hii"
是我想要的而不是
45 "hii".为了做到这一点,我如何调整数据类型的定义?我打算为此数据类型重载运算符,例如:
45#"kkk" + 128#"a"应该是一个有效的操作.
您可以将运算符定义为构造函数的别名:
data Comp = Comp Int String deriving Show
(#) :: Int -> String -> Comp
(#) = Comp
Run Code Online (Sandbox Code Playgroud)
现在您可以#用来构建您的值:
?: 45#"kkk"
Comp 45 "kkk"
Run Code Online (Sandbox Code Playgroud)