在此代码中,我能够使用Algo
和Lit
之类的直接构造函数构建Nom
列表,但也可以使用整数构建Algo
列表。这是因为Num
派生type Nr = Double
data Algo
= Nom Nr
| Lit String
| Und
deriving (Show)
instance Num Algo where
(+) (Nom a) (Nom b)=Nom(a+b)
(+) _ _=Und
(*) (Nom a) (Nom b)=Nom(a*b)
(*) _ _=Und
abs (Nom a)=Nom(abs a)
abs _=Und
signum (Nom a)=Nom(signum a)
signum _=Und
fromInteger a=Nom(fromInteger a)
main=do
print ([1,2,3,Und,Nom 5,Lit "x"]::[Algo])
。
是否可以为字符串做类似的事情?
[Nom 1.0,Nom 2.0,Nom 3.0,Und,Nom 5.0,Lit "x"]
运行正常结果:
print (["test",1,2,3,Und,Nom 5,Lit "x"]::[Algo])
所需代码:
$("#fotorama_right_div").on("click", 'img', function() {
$('#fotorama_right_div').one('fotorama:showend', function (e, fotorama) {
console.log($(fotorama.activeFrame).attr('url'));
});});
当然会给出错误...... 转换发生在哪里?在解析/编译?
readPrec没有帮助
答案 0 :(得分:11)
要让"test"
自动“转换”为Algo
,您需要定义IsString
的实例,然后使用GHC扩展OverloadedStrings
:
instance IsString Algo where
fromString = Lit
以便以下方法正常运行:
print ["test", 1, 2, 3, Und, Nom 5, Lit "x"]
-- [Lit "test",Nom 1.0,Nom 2.0,Nom 3.0,Und,Nom 5.0,Lit "x"]