如何在我的项目或cabal依赖项中定义的函数/类等的ghci(使用lambdabot 2.5 GHCi on Acid)中查看源定义? 例如,假设我有:
module Main where
import System.Random
gen = (random (mkStdGen 0)) :: (Bool,StdGen)
myadd :: Int -> Int
myadd x = 2 * x
main = do
print "finished"
然后我可以获得有关myadd
和random
的信息,但我无法打印来源。这是我在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依赖项中的函数(random
)。
我是否可以使用lambdabot的某些功能打印出myadd
和random
等内容的定义?我知道你可以使用Hoogle来random
,但我想知道是否有任何方法可以使用ghci或lambdabot来打印源定义。
[编辑]
自发布以来,我发现Emacs/Inferior Haskell processes以及其中的某些功能似乎可以实现上述某些功能。
答案 0 :(得分:1)
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