-2

我需要创建一个功能f:: Log->[String] 来做到这一点 (((o, i ,d),s) = [(o, i ,d)]

type Log = (Plate, [String])

type Plate = (Pin, Pin, Pin) type Pin = (Char, Int)

4

4 回答 4

5

如果您在这样的页面上,请单击右侧的“来源”,在您感兴趣的功能旁边。

如果您需要查找功能,Hayo!Hoogle会将您链接到上述文档页面。

需要注意的重要一点是,show它没有一个定义。show是为Show(大写“S”)类型类中的所有数据类型定义的函数。例如,这里是Show typeclass的完整源代码。Show 在类型类中被定义为 just show :: a -> String。但是,如果您搜索“instance Show Bool”或“instance Show Int”,您会找到具体的定义。


对于您问题的第二部分,获取show新类型函数的最简单方法是简单地deriving (Show)在它下面写。例如,

data Foo = Foo Int Int
   deriving (Show)

现在我可以使用showtype 的数据了Foo

于 2012-10-07T15:52:34.293 回答
2

使用hoogle查找此类信息。

示例:http ://www.haskell.org/hoogle/?hoogle=show

在列表中找到您想要的功能后,单击此处,您将Source在页面右侧找到一个链接。

注意这是对原始问题的回答:

我在哪里可以看到 haskell 中预定义函数的代码?主要是函数SHOW?

于 2012-10-07T15:34:43.523 回答
2
g :: Log -> [String]
g (plate, _) = [show plate]
于 2012-10-07T16:28:36.207 回答
1

确实可以使用 Hoogle 搜索 Prelude(和其他模块)中定义的函数,但源代码本身位于 Hackage。

Hackage是 Haskell 软件包的数据库。您可以从中下载新包,还可以查看数据库中每个包的 Haddock 文档。

这是标准 Prelude 的 Haddock 页面。它记录了 Prelude 模块导出的类型类、数据类型、类型和顶级函数。每个定义标题的右侧是一个链接,上面写着“来源”。您可以单击此按钮转到您正在查看的模块的源代码的在线副本。


在预览时,您现在完全提出了一个不同的问题,而在再次预览时,实际上原始问题已从这篇文章中删除。

您的新问题尚不清楚,但此解决方案将在您的示例中产生输出。

> [fst ((('O',0),('I',0),('D',1)),"O->D")]
[(('O',0),('I',0),('D',1))]

顺便说一句,我认为您使用列表表示法而不是双引号来标识Strings,所以我在0->D上面修复了它。所以你也可以试试这个。

> show (fst ((('O',0),('I',0),('D',1)),"O->D"))
"(('O',0),('I',0),('D',1))"

这是有效的,因为您只在已经具有实例的数据结构上定义了类型同义词(通过type在声明中使用而不是)。dataShow

于 2012-10-07T16:13:39.520 回答