Yesod 本から取ったこの例では、テンプレート haskell によって生成されたコードを理解しようと、しばらく時間を費やしました。
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Person
name String
age Int
deriving Show
Car
color String
make String
model String
deriving Show
|]
私は何が起こっているのか(多くの型のマーシャリング)をほとんど見ているように感じますが、1つのセクションがまだ私を混乱させています:
instance PersistEntity (PersonGeneric backend) where
data instance Unique (PersonGeneric backend) =
data instance EntityField (PersonGeneric backend) typ
= typ ~ KeyBackend backend (PersonGeneric backend) => PersonId |
typ ~ String => PersonName |
typ ~ Int => PersonAge
type instance PersistEntityBackend (PersonGeneric backend) =
backend
データ インスタンスinstance EntityField (PersonGeneric backend) typ
には 3 つのデータ コンストラクターがあり、これは理にかなっています (データベースの各列に 1 つ) が、haskell でチルダが何をするかを調べた後でも、そこで何をしているのか理解できません。=>
通常は全称量化に使用される が、型を制限していないように見える何かの後に使用されるのはなぜですか?
何らかの方法でより明確にできるかどうか教えてください。