Giả sử tôi có mã (sai) sau.Haskell Lỗi mã không thể truy cập?
data A a b where
APure :: (A a b)
AApply :: A (A b c) c
test :: (A a b) -> a -> b
test (APure) a = a
test AApply a = undefined
GHC sau đó sẽ cho tôi lỗi này:
Couldn't match type `b' with `A b1 b'
`b' is a rigid type variable bound by
the type signature for test :: A a b -> a -> b
Inaccessible code in
a pattern with constructor
AApply :: forall c b. A (A b c) c,
in an equation for `test'
In the pattern: AApply
In an equation for `test': test AApply a = undefined
Không phải là thông báo lỗi này hoàn toàn sai? Lỗi này không liên quan gì đến AApply.
Làm thế nào để 'AApply' được cho là có kiểu chung' A a b' nếu bạn khai báo nó là 'A (A b c) c' rồi? Nó giống như khi bạn định nghĩa 'concat ':: [a] -> [b]' như 'concat' = concat': Haskell sẽ hợp nhất' a' "xuống" thành '[b]' ?. – leftaroundabout
Có, nó không trực quan. Có lẽ bạn nên [nộp một lỗi] (http://hackage.haskell.org/trac/ghc/newticket?type=bug). –
@leftaroundabout Tôi không thực sự hiểu những gì bạn có ý nghĩa, nhưng trường hợp đó là entierlly chính xác. Đọc trên patternmatching với GADTs. – nulvinge