2011-11-09 41 views
6

Có cách nào trong GHCi về cơ bản có được một nhà nước đổ? Điều này có nghĩa là danh sách:GHCi môi trường bãi

  • Tất cả các toán tử được tải cùng với ưu tiên, liên kết và chữ ký.
  • Tất cả các lớp đã tải.
  • Tất cả dữ liệu, loại và loại mới được tải cùng với các lớp đó là các trường hợp nào.
  • Tất cả các chức năng đã tải có chữ ký của nó và lớp chúng thuộc về nếu chúng có.

Giả sử rằng điều này là có thể, bạn cũng có thể thực hiện việc này khi chạy, trong trường hợp ngoại lệ?

Trả lời

4

:browse sẽ cung cấp cho bạn hầu hết thông tin này. Nó hiển thị

  • Nhập chữ ký cho hàm và toán tử.
  • Lớp học và phương pháp của họ.
  • Loại dữ liệu, kiểu mới và loại từ đồng nghĩa, với các hàm tạo nếu chúng nằm trong phạm vi.

Nếu không có bất kỳ đối số nào, nó sẽ hiển thị thông tin này cho mô-đun hiện được tải. Bạn cũng có thể chỉ định một mô-đun khác.

Prelude> :browse Control.Applicative 
class (Functor f) => Applicative f where 
    pure :: a -> f a 
    (<*>) :: f (a -> b) -> f a -> f b 
    (*>) :: f a -> f b -> f b 
    (<*) :: f a -> f b -> f a 
... 

Để xem thêm chi tiết, bao gồm ưu tiên và kết hợp cho người vận hành, cũng như trường hợp cho loại dữ liệu, hãy sử dụng :info.

Prelude> :info (^) 
(^) :: (Num a, Integral b) => a -> b -> a -- Defined in GHC.Real 
infixr 8^
Prelude> :info Bool 
data Bool = False | True -- Defined in GHC.Bool 
instance Bounded Bool -- Defined in GHC.Enum 
instance Enum Bool -- Defined in GHC.Enum 
instance Eq Bool -- Defined in GHC.Base 
instance Ord Bool -- Defined in GHC.Base 
instance Read Bool -- Defined in GHC.Read 

Các lệnh này cũng khả dụng khi gỡ lỗi.

Để biết thêm thông tin, hãy nhập :help hoặc xem the GHCi chapter of the GHC user's guide.

+0

Tôi muốn một cái gì đó như thế này cho toàn bộ hệ thống không chỉ là một mô-đun. –

+2

@VansonSamuel: Có dạng ': browse * Module', sẽ hiển thị thông tin cho bất kỳ thứ gì trong phạm vi trong mô-đun đó, tức là tất cả các nhập khẩu cũng như xuất khẩu của nó. Có lẽ đó là gần gũi hơn với những gì bạn cần? – hammar

+0

Tôi sẽ thử điều này. Cảm ơn @hammar đây giống như câu hỏi thứ tư bạn đã giúp tôi. :-) –

1

Có nhiều cách để nhận thông tin này. Vấn đề là, theo như tôi biết, không có cách nào lọc nó chính xác theo cách bạn muốn, nhưng dù sao ở đây nó là:

  • Nếu bạn muốn xem tất cả định danh, bao gồm các lớp học, các nhà khai thác, Constructors và Types, hiện được định nghĩa trong ghci chỉ cần nhấn tab trong khi bạn có con trỏ trên khoảng trắng.

  • Nếu bạn muốn biết những ưu tiên và kết hợp của một nhà điều hành * chỉ cần sử dụng

    :i * 
    
  • Nếu bạn muốn xem những gì lớp M là thể hiện của chỉ cần sử dụng

    :i M 
    
  • Nếu bạn muốn thấy chữ ký của hàm f chỉ cần sử dụng

    :i f 
    

    Nếu bạn viết :set -fbreak-on-exception thì ghci sẽ vỡ thay vì thất bại khi một ngoại lệ được ném và sau đó bạn có thể sử dụng tất cả các lệnh trên trong một ngoại lệ.