为什么Haskell的showList函数返回ShowS

时间:2016-01-08 01:46:14

标签: haskell lambda

我正在尝试为简单的键/值对创建一个类型,可以将其转换为URL查询。所以我创建了以下ADT:

data Target where
    (:=>) :: String -> String -> Target

instance Show Target where
    show (a :=> b) = a ++ "=" ++ b
    showList (xs) = (\y -> intercalate "&" $ map show xs)

当我在ghci中运行它时,它正是我想要的:

ghci>["id" :=> "123", "color" :=> "red"]
id=123&color=red
it :: [Target]

我的问题是:为什么我需要showList中的lambda?我试着show y,它只打印一个空字符串。当参数为空时返回ShowS的目的是什么?或者可能是一个更好的问题,在这种情况下应用的showS函数是什么?

1 个答案:

答案 0 :(得分:1)

存在

scalaVersion := "2.11.6" lazy val akkaVersion = "2.3.13" lazy val scalaTestVersion = "2.2.4" lazy val specs2Version = "3.6" libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-actor" % akkaVersion, "com.typesafe.akka" %% "akka-testkit" % akkaVersion % "test", "org.scalatest" %% "scalatest" % scalaTestVersion % "test", "org.specs2" %% "specs2-core" % specs2Version ) 以允许通过组合优化串联和串联。有关ShowS

的详细信息,请参阅this Stack Overflow answer

对于您的示例,您可能希望保留串联优势,而不是忽略ShowS

y