Haskell 显示字符串时删除反斜杠?

Haskell 显示字符串时删除反斜杠?,haskell,Haskell,我有一种参数化方法,它将字符串连接到参数化输入上: foo::(Show a) => a -> String foo f = show f ++ " string" 当我不传入字符串时是可以的,但是当我传入字符串时,我会得到额外的黑色斜线 有什么方法可以避免这种情况吗?show并不是真正的toString等价物,而是inspect或var\u dump等价物。它不是用来格式化人工输出的 >您可以考虑 显示不是真正的 toStase等价物,而是一个检查 >或 VARYDUPP等效。

我有一种参数化方法,它将字符串连接到参数化输入上:

foo::(Show a) => a -> String
foo f = show f ++ " string"
当我不传入字符串时是可以的,但是当我传入字符串时,我会得到额外的黑色斜线


有什么方法可以避免这种情况吗?

show
并不是真正的
toString
等价物,而是
inspect
var\u dump
等价物。它不是用来格式化人工输出的


>您可以考虑

<代码>显示不是真正的<代码> toStase等价物,而是一个<代码>检查<代码> >或<代码> VARYDUPP等效。它不是用来格式化人工输出的


你可以考虑< /p> 这样做的一个方法,这不是很好,但它确实是可能的,就是使用可键入的类。

import Data.Maybe (fromMaybe)
import Data.Typeable (cast)
foo :: (Show a, Typeable a) => a -> String
foo f = fromMaybe (show f) (cast f)
但是,这将其限制为Typeable类的成员(它包含在base中,所以您不需要依赖任何其他库,而且大多数情况下都已经定义了它)


这是通过检查
f
是否是
字符串(或者假装是
字符串,这只会发生在编写库时有人真的很邪恶的情况下),如果是,则返回它,否则显示它。

这样做的一种方法,虽然不是很好,但肯定是可能的,是使用可键入类

import Data.Maybe (fromMaybe)
import Data.Typeable (cast)
foo :: (Show a, Typeable a) => a -> String
foo f = fromMaybe (show f) (cast f)
但是,这将其限制为Typeable类的成员(它包含在base中,所以您不需要依赖任何其他库,而且大多数情况下都已经定义了它)

这是通过检查
f
是否是
字符串(或者假装是
字符串,这只会发生在编写库时有人真的很邪恶的情况下),如果是,则返回它,否则显示它。

不知道“标准”库函数,但只需使用自己的类似show的实现即可:

class StrShow a where
    showStr :: a -> String

instance StrShow String where
    showStr = id
instance Show a => StrShow a where
    showStr = show

GHCi> showStr 1
"1"
GHCi> showStr "hello"
"hello"
通过这种方式,您不需要额外的库,但如果这不是一个问题,您必须使用大量ghc扩展(TypeSynonymInstances、FlexibleInstances、UndededicatableInstances、OverlappingInstances)。

不了解“标准”库函数,但只需使用自己的类似show的实现即可:

class StrShow a where
    showStr :: a -> String

instance StrShow String where
    showStr = id
instance Show a => StrShow a where
    showStr = show

GHCi> showStr 1
"1"
GHCi> showStr "hello"
"hello"

这样,您不需要额外的库,但必须使用大量ghc扩展(TypeSynonymInstances、FlexibleInstances、UndededicatableInstances、OverlappingInstances)如果这不是一个问题。

我真的不想使用很多库我真的不想使用很多库如果你删除
实例Show a=>StrShow a where showStr=Show
并手动添加每个实例,你只需要
类型同义词实例
就可以了。你只需要
TypeSynonymInstances
如果删除
instance Show a=>StrShow a where showStr=Show
并手动添加每个实例。