Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 查看ghci中特定类型的Typeclass定义_Haskell_Typeclass_Ghci - Fatal编程技术网

Haskell 查看ghci中特定类型的Typeclass定义

Haskell 查看ghci中特定类型的Typeclass定义,haskell,typeclass,ghci,Haskell,Typeclass,Ghci,有没有办法在ghci中查看特定类型的Typeclass定义 例如,可能的定义如下: instance Functor Maybe where fmap f (Just x) = Just (f x) fmap f Nothing = Nothing 我能在ghci中看到这个吗 当我在ghci中使用:info时,我得到: Prelude> :i Maybe data Maybe a = Nothing | Just a -- Defined in `

有没有办法在ghci中查看特定类型的Typeclass定义

例如,
可能
的定义如下:

instance Functor Maybe where  
     fmap f (Just x) = Just (f x)  
     fmap f Nothing = Nothing  
我能在ghci中看到这个吗

当我在ghci中使用
:info
时,我得到:

Prelude> :i Maybe
data Maybe a = Nothing | Just a     -- Defined in `Data.Maybe'
instance Eq a => Eq (Maybe a) -- Defined in `Data.Maybe'
instance Monad Maybe -- Defined in `Data.Maybe'
instance Functor Maybe -- Defined in `Data.Maybe'
instance Ord a => Ord (Maybe a) -- Defined in `Data.Maybe'
instance Read a => Read (Maybe a) -- Defined in `GHC.Read'
instance Show a => Show (Maybe a) -- Defined in `GHC.Show'

在上面的输出中,我想看看它是如何在数据中定义的。可能作为
Functor
的一个实例。无论如何,要在ghci中看到这一点?

不,这是不可能的——不仅仅是针对实例,而是针对任何事情。GHC只注册包的编译版本,因此ghci通常无法获得源代码

也许,大多数情况下,你会使用来自黑客的东西;在这种情况下,查找此类实例的源代码非常简单,方法是查找类或数据声明,然后单击

当你不能上网或其他任何原因不能上网时,你首先需要知道模块包含在什么包中。最简单的方法是:

$ghc pkg查找模块数据。可能
/usr/local/haskell/lib/ghc-7.6.2/package.conf.d
base-4.6.0.1
Haskell 2010-1.1.1.0
~/.ghc/x86_64-linux-7.6.2/package.conf.d

然后,正如我所说,GHC不知道这些包的源代码在哪里——事实上,它甚至可能在您的系统上都不可用!但是如果您使用
cabal install
安装了软件包(或依赖于它的软件包),默认情况下,它会出现在
~/.cabal/packages/hackage.haskell.org/P中ᴀᴄᴋᴀɢᴇNᴀᴍᴇ(作为压缩存档,但这不是一个很大的障碍)。在PackageProject文件夹中,您可以通过目录结构(表示模块层次结构)简单地定位模块

其他软件包,如您的
数据示例。可能
(软件包
Haskell 2010
),可能与您的GHC安装一起提供,例如Haskell平台。在这种情况下,我相信最简单的事情就是在那里搜索Haddock文档文件。就我而言

$find/usr/local/haskell-name“Data Maybe.html”| head-n1 | xargs firefox


这将打开与hoogle链接的内容(但在本地HD上)相同的界面,您还可以以用户友好的方式浏览源代码。

在您自己的机器上运行hoogle相当简单(
cabal install;hoogle data
)。@aavogt:right,但是命令行搜索不会像在线版本那样提供到haddock的好链接。将其用作本地服务器并不是那么简单。对于搜索类似于
数据双精度
的内容及其实现(例如,
+
)以符合
Num
,此方法仍然不能提供查看源代码的方法。hoogle中的
示例可能提供了与源代码的链接,但对于类型,通常不提供。