Sử dụng GHC 7.10
Phiên bản đầu tiên của GHC có chứa nội dung này được phát hành vào ngày 27 tháng 3 năm 2015 .
Đây là phiên bản mới nhất và Prelude có một số bổ sung mới hữu ích cho việc chơi gôn:
Các (<$>)
và (<*>)
khai thác
Các toán tử hữu ích từ Data.Applicative
làm cho nó trong! <$>
chỉ là fmap
, vì vậy bạn có thể thay thế map f x
và fmap f x
với f<$>x
mọi nơi và giành lại byte. Ngoài ra, <*>
là hữu ích trong Applicative
ví dụ cho danh sách:
Prelude> (,)<$>[1..2]<*>"abcd"
[(1,'a'),(1,'b'),(1,'c'),(1,'d'),(2,'a'),(2,'b'),(2,'c'),(2,'d')]
Nhà (<$)
điều hành
x<$a
tương đương với fmap (const x) a
; tức là thay thế mọi phần tử trong một container bằng x
.
Đây thường là một thay thế tốt đẹp để replicate
: 4<$[1..n]
ngắn hơn replicate n 4
.
Đề xuất có thể gập lại / chuyển đổi
Các chức năng sau đây đã được nâng từ làm việc trên danh sách [a]
thành các Foldable
loại chung t a
:
fold*, null, length, elem, maximum, minimum, sum, product
and, or, any, all, concat, concatMap
Điều này có nghĩa là bây giờ họ cũng làm việc Maybe a
, nơi họ hành xử giống như "danh sách có nhiều nhất một yếu tố". Ví dụ null Nothing == True
, hoặc sum (Just 3) == 3
. Tương tự, length
trả về 0 cho Nothing
và 1 cho Just
các giá trị. Thay vì viết x==Just y
bạn có thể viết elem y x
.
Bạn cũng có thể áp dụng chúng trên các bộ dữ liệu, hoạt động như thể bạn gọi \(a, b) -> [b]
trước. Nó gần như hoàn toàn vô dụng, nhưng or :: (a, Bool) -> Bool
ngắn hơn một ký tự snd
và elem b
ngắn hơn (==b).snd
.
Các hàm Monoid mempty
vàmappend
Không thường xuyên là một trình bảo vệ cuộc sống, nhưng nếu bạn có thể suy ra kiểu đó, mempty
thì ngắn hơn một byte Nothing
, vì vậy có điều đó.