Даже при сопоставлении цепочек экземпляров все еще выполняется в заголовке экземпляра. В случае сбоя какого-либо ограничения для выбранного экземпляра "обратного отслеживания" не происходит.
Ваши экземпляры полностью перекрываются на голове, поэтому ваш первый экземпляр всегда совпадает с первым, и происходит сбой, потому что для X
.
нет экземпляра
A
.
Цепочки экземпляров позволяют вам определить явный порядок разрешения экземпляров, не полагаясь, например, на алфавитный порядок имен и т. Д. (Как это было до версии 0.12.0 - , пожалуйста, проверьте третий абзац здесь ). Например, вы можете определить этот сценарий перекрытия:
class IsRecord a where
isRecord :: a -> Boolean
instance a_isRecordRecord :: IsRecord (Record a) where
isRecord _ = true
instance b_isRecordOther :: IsRecord a where
isRecord _ = false
в
instance isRecordRecord :: IsRecord (Record a) where
isRecord _ = true
else instance isRecordOther :: IsRecord a where
isRecord _ = false
Надеюсь, он скомпилируется - у меня еще нет purs-0.12.0-rc
-)