Tôi đã tìm thấy một tình huống thú vị, khi sử dụng các loại dữ liệu với họ loại.Các ứng dụng gia đình kiểu Haskell không được đánh giá
Thông báo lỗi của trình biên dịch là No instance for (C (ID())) arising from a use of W
. Nó cho thấy rằng một ứng dụng gia đình kiểu không được đánh giá đầy đủ, ngay cả khi nó được bão hòa. :kind! ID()
đánh giá là ()
, vì vậy theo trường hợp C()
nên được sử dụng.
{-# LANGUAGE GADTs, TypeFamilies, UndecidableInstances, FlexibleContexts #-}
type family ID t where
ID t = t
class C t where
instance C() where
data W where
W :: C (AppID t) => P t -> W
type family AppID t where
AppID t = (ConstID t)()
type family ConstID t where
ConstID t = ID
data P t where
P :: P t
data A
w :: W
w = W (P :: P A)
Tôi bằng cách nào đó có thể buộc đánh giá là ID()
? Đó có phải là lỗi trình biên dịch không?
Tôi đang sử dụng GHC 7.8.3
(ID) đánh giá như thế nào? Không có trường hợp nào cho họ ID. – augustss
Tôi đã viết nó như là một loại hình gia đình khép kín (http://www.haskell.org/haskellwiki/GHC/Type_families#Closed_family_simplification) –
Viết nó như một gia đình kiểu bình thường không thay đổi lỗi. –