我阅读了这篇关于如何创建自定义 Prelude 库的博文。图书馆可以在这里找到。它所做的其中一件事是禁止String
。它还定义了一个用于自动字符串转换的函数(here)。我已OverloadedStrings
在 cabal 文件中启用。
在使用这个库之前,我有:
data Point = Point Int Int
instance Show Point where
show (Point x y) = "(" ++ show x ++ ", " ++ show y ++ ")"
使用图书馆后,它说:“show' is not a (visible) method of class
显示”
所以我求助于创建一个自定义函数来显示数据类型:
showPoint :: Point -> LText
showPoint (Point x y) = toS ("(" ++ show x ++ ", " ++ show y ++ ")")
编译器说使用toS, "(", show
是模棱两可的,但我不明白为什么。我必须做类似这里提议的事情吗?
编辑:
必须禁用 OverloadedStrings 并将代码更改为以下内容:
showPoint :: Point -> LText
showPoint (Point x y) = toS "(" <> show x <> toS ", " <> show y <> toS ")"
想知道是否可以在不禁用 OverloadedStrings 的情况下做同样的事情,所以我不必toS
为每个String
.