Tôi đã cố gắng sử dụng bản ghi cập nhật cho bản ghi tồn tại khi tôi gặp lỗi. Một google nhanh chóng dẫn tôi đến feature request #2595, cho thấy nó như được thực hiện cho GHC trở lại trong phiên bản 6.8.3. Tôi đang sử dụng 6.10.4, vì vậy tôi nghĩ rằng nó sẽ làm việc, nhưng mã ví dụ từ các yêu cầu tính năng:Haskell: Bản cập nhật cho các loại tồn tại
{-# LANGUAGE ExistentialQuantification,Rank2Types #-}
module Foo where
data Foo = forall a . Foo { foo :: a -> a, bar :: Int }
x :: Foo
x = Foo { foo = id, bar = 3 }
f :: Foo -> Foo
f rec = rec { foo = id }
g :: Foo -> Foo
g rec = rec { bar = 3 }
mang lại các lỗi tương tự như phàn nàn về trong yêu cầu tính năng:
test.hs:10:8:
Record update for the non-Haskell-98 data type `Foo' is not (yet) supported
Use pattern-matching instead
In the expression: rec {foo = id}
In the definition of `f': f rec = rec {foo = id}
test.hs:13:8:
Record update for the non-Haskell-98 data type `Foo' is not (yet) supported
Use pattern-matching instead
In the expression: rec {bar = 3}
In the definition of `g': g rec = rec {bar = 3}
Đây có phải là tính năng giảm ý thức tại một thời điểm nào đó hay tôi nên gửi báo cáo lỗi?
Ah. Cảm ơn bạn đã tiết kiệm cho tôi khi tạo ra một sai lầm ngớ ngẩn bằng cách cho rằng nó phải được sửa trong phiên bản của tôi. Tắt để đi cập nhật GHC! – rampion
Ah, thông báo lỗi mới và khác, giống như bạn đã nói. Nhưng một người nghĩ rằng tôi đang làm điều gì đó sai, không phải là điều đó là không thể. – rampion