2011-12-16 29 views
14

Tôi đã rối tung xung quanh với HashMap và cố gắng sử dụng một mã khóa Data.Bson.ObjectId. Tôi, tất nhiên, phát hiện ra rằng không có một cá thể Hashable cho cấu trúc đó. Đó là ok, bởi vì viết một là tầm thường.Tôi có thể thêm tuyên bố thể hiện trong GHCi

instance Hashable ObjectId where hash (Oid x y) = hash (x,y) 

Tôi gõ dòng vào GHCi và được cho biết "phân tích lỗi trên đầu vào 'dụ'". Điều này thực sự có ý nghĩa khi lời nhắc GHCi hoạt động như thể các dòng đã được nhập vào một khối làm trong đơn nguyên IO và một thể hiện không thể được định nghĩa trong ngữ cảnh này.

Câu hỏi của tôi sau đó, có cách nào để xác định một cá thể mới trong GHCi không?


Tại sao trường hợp này không được cung cấp bởi thư viện là một vấn đề khác. Tôi tin rằng câu trả lời là để hạn chế sự phụ thuộc ngoại trừ việc gói bson đã phụ thuộc vào mọi thứ dưới ánh mặt trời.

Trả lời

14

Tin vui: Có, có một cách để xác định một cá thể mới trong GHCi.

Tin xấu: Hiện tại, bước đầu tiên làm như vậy là "cài đặt ảnh chụp nhanh phát triển GHC".

Điều này đã là một chút rõ ràng về chức năng bị thiếu trong GHCi trong một thời gian dài. Không có lý do cố hữu nào để nó vắng mặt, nhưng tôi cho rằng nó có phần khó thực hiện và do đó nó đã bị gạt sang một bên.

Tuy nhiên, có vẻ như as of version 7.4.1, it's now available:

Tại GHCi nhắc bạn cũng có thể nhập bất kỳ top-level khai Haskell, bao gồm dữ liệu, chủng loại, Newtype, giai cấp, ví dụ, phát sinh, và tuyên bố nước ngoài. Ví dụ:

Prelude> data T = A | B | C deriving (Eq, Ord, Show, Enum) 
Prelude> [A ..] 
[A,B,C] 
Prelude> :i T 
data T = A | B | C  -- Defined at <interactive>:2:6 
instance Enum T -- Defined at <interactive>:2:45 
instance Eq T -- Defined at <interactive>:2:30 
instance Ord T -- Defined at <interactive>:2:34 
instance Show T -- Defined at <interactive>:2:39 

Cho dù bạn nghĩ rằng có mà ngay bây giờ giá trị phức tạp của việc cài đặt một phiên bản không phát hành GHC là tùy thuộc vào bạn.

Các vấn đề liên quan