2015-12-05 20 views
11

Ví dụ, điều này không gõ kiểm traLàm thế nào để cung cấp cho infixities cho các nhà khai thác trong lambda?

\cons nil -> 5 `cons` 3 `cons` nil 

cũng không thực hiện điều này

\(#) -> 5 # 3 # nil 

Mặc dù cả hai làm

\cons nil -> 5 `cons` nil 
\(#) nil -> 5 # nil 

Có cách nào để gán infixites để khai thác trong lambdas . Tôi cố gắng

infixr 5 # 
foo = \(#) nil -> 5 # 3 # nil 

mang đến cho một lỗi mà không có định nghĩa về #

foo = \(infixr 5 #) nil -> 5 # 3 # nil 

mà chỉ là một lỗi cú pháp.

Tôi có thể làm gì?

Trả lời

16

tờ khai tính cố định có thể được địa phương nhưng phải kèm các định nghĩa, vì vậy bạn sẽ phải viết một cái gì đó giống như

foo cons nil = 'a' # 'b' # nil 
    where (#) = cons 
     infixr 5 # 

hoặc

foo = \cons nil -> let (#) = cons; infixr 5 # in 'a' # 'b' # nil 

, vv

+4

đẹp thực sự! Đây là một phần của Haskell98, Haskell2010, hay chỉ là GHC? – leftaroundabout

+1

Tôi đặc biệt thích phiên bản cho phép. – PyRulez

+1

Nó là Haskell 98. Cú pháp của let và where liên quan đến "decls", bao gồm các chữ ký kiểu, khai báo tính cố định và chức năng và các ràng buộc mẫu. –

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