gpt4 book ai didi

haskell - 使用 lambdabot 在 ghci 中打印函数/类的定义

转载 作者:行者123 更新时间:2023-12-02 03:35:08 25 4
gpt4 key购买 nike

如何在 ghci(使用 lambdabot 2.5 GHCi on Acid )中查看我的项目或 cabal 依赖项中定义的函数/类等的源定义?例如假设我有:

module Main where
import System.Random

gen = (random (mkStdGen 0)) :: (Bool,StdGen)

myadd :: Int -> Int
myadd x = 2 * x

main = do
print "finished"

然后我可以获得有关myaddrandom 的信息,但我无法打印源代码。这是我在 ghci 中可以做的(使用 lambdabot):

*Main GOA> :src foldr
foldr f z [] = z
foldr f z (x:xs) = f x (foldr f z xs)
*Main GOA> :i myadd
myadd :: Int -> Int -- Defined at test.hs:7:1
*Main GOA> :src myadd
Source not found. I don't think I can be your friend on Facebook anymore.
*Main GOA> :i random
class Random a where
...
random :: RandomGen g => g -> (a, g)
...
-- Defined in ‘System.Random’
*Main GOA> :src random
Source not found. Listen, broccoli brains, I don't have time to listen to this trash.

lambdabot 似乎能够打印 foldr 的定义,但不能打印定义在项目(myadd)或 cabal depedencies 中的函数(random)。

我是否可以使用 lambdabot 的某些功能打印出诸如 myaddrandom 之类的定义?我知道您可以将 Hoogle 用于 random,但我想特别知道是否有任何方法可以使用 ghci 或 lambdabot 打印出源定义。

[编辑]

发帖后我发现了Emacs/Inferior Haskell processes而 theirin 的一些功能似乎实现了上面的一些。

最佳答案

Lambdabot 的 src 无法做到这一点。它基于 lambdabot 本身附带的函数定义的简短列表,参见。 https://github.com/mokus0/lambdabot/blob/master/lambdabot/State/source .因此它有时会撒谎,例如 foldr 当前在 ghc 的库中定义为

foldr k z = go
where
go [] = z
go (y:ys) = y `k` go ys

关于haskell - 使用 lambdabot 在 ghci 中打印函数/类的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23969963/

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