2013-07-19 24 views
6

Tôi thích chơi trong REPL vì đây là một cách thực sự nhanh chóng và đơn giản để thử những điều mới. Một số khía cạnh của ngôn ngữ, như bạn đã biết, được thực hiện khác nhau trong REPL như trái ngược với các mô-đun, định nghĩa nhiều dòng là một trong số chúng.Có thể xác định khai báo tính cố định trong REPL không?

Bây giờ, tôi tự hỏi, và trong trường hợp đó, tôi có thể khai báo toán tử cố định trong REPL như thế nào. Nỗ lực ngây thơ ... bất ngờ ... không hoạt động.

Prelude> let (f · g) x = f(g(x)) 
Prelude> infixl 7 · 
+2

Đối với những thứ bạn định nghĩa tại dấu nhắc, 'let infixl 7/& /; f/&/g = \ x -> f (g x) '. Bạn không thể có khai báo xác thực cho các công cụ được định nghĩa ở nơi khác, afaik. –

Trả lời

9

Bạn có thể tuyên bố tính cố định sử dụng định nghĩa đa dòng như

>>> :{ 
>>> let infixl 7 *** 
>>>  (f *** g) (a,b) = (f a, g b) 
>>> :} 
>>> (negate *** show) (1,2) 
(-1,"2") 

Sửa đây: Mặc dù, thú vị, tính cố định không được hiển thị khi bạn hỏi GHCI về chức năng

>>> :i *** 
(***) :: (a -> a') -> (b -> b') -> (a, b) -> (a', b') 
     -- Defined at <interactive>:10:8 

so với

>>> :i && 
(&&) :: Bool -> Bool -> Bool  -- Defined in `GHC.Classes' 
infixr 3 && 
+0

Nó được hiển thị bởi ghci của tôi, bên dưới dòng '- Defined at'. –

+1

Thật vậy, sự cố định được hiển thị bởi ghci-7.6, nhưng không phải bởi ghci-7.4. – leftaroundabout

+0

Điều này dường như không hoạt động đối với các toán tử kiểu trong các họ loại. – CMCDragonkai

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