import Spec.Courseware.Model.Primitives

/-!
# Element —— 课程内容的最小单位

一个 element = 一个 kind 标签 + 符合该 kind schema 的数据(ADR-0005)。
用依赖结构编码,使"数据必须匹配 kind"成为类型层面的事实,不是运行时校验。
-/

namespace Spec.Courseware

variable (P : Primitives)

/-- 一个 element 实例(ADR-0005)。data 的类型由 kind 决定,所以没法造出数据和 kind
    不符的 element——schema 合规由类型保证。逐字稿、重点圈划这类跟具体 kind 强相关
    的字段,落在该 kind 的 ElementData 里,不放在这个通用结构上。 -/
structure Element where
  /-- 这个 element 的 kind。 -/
  kind : P.KindId
  /-- 符合 kind schema 的数据,类型随 kind 变。 -/
  data : P.ElementData kind

end Spec.Courseware
