gpt4 book ai didi

haskell - 在 ghci 中查看特定类型的 Typeclass 定义

转载 作者:行者123 更新时间:2023-12-04 00:58:39 24 4
gpt4 key购买 nike

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

例如,Maybe定义如下:

instance Functor Maybe where  
fmap f (Just x) = Just (f x)
fmap f Nothing = Nothing

我可以在 ghci 中看到这个吗?

什么时候,我用 :info在 ghci 中,我得到了这个:
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'

在上面的输出中,我想看看它是如何在 Data.Maybe 中定义为 Functor 的实例的。 .无论如何在 ghci 中看到?

最佳答案

不,这是不可能的——不仅对于实例,而且对于任何事情。 GHC 只注册一个包的编译版本,所以源代码一般不会提供给 ghci。

可能,大多数情况下你会使用来自 Hackage 的东西;在这种情况下,通过 hoogling the module 查找此类实例的源代码非常简单。 ,找到类或数据声明,然后单击 source .

当您无法访问互联网或因其他原因无法上网时,您首先需要了解该模块包含在哪个软件包中。最简单的方法是:

$ ghc-pkg find-module Data.Maybe
/usr/local/haskell/lib/ghc-7.6.2/package.conf.d
   base-4.6.0.1
   haskell2010-1.1.1.0
~/.ghc/x86_64-linux-7.6.2/package.conf.d



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

其他软件包,例如您的 Data.Maybe 示例(包 haskell2010 ),可能与您的 GHC 安装一起出现,例如Haskell 平台。在这种情况下,我相信最简单的方法是在那里搜索 Haddock 文档文件。就我而言,

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



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

关于haskell - 在 ghci 中查看特定类型的 Typeclass 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18304714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com