generated at
HasField型クラス
Magic Type Classesによってinstanceが自動生成される
OverloadedRecordFieldsで使用される
RecordDotSyntaxでも使用されるはず(?)



定義
GHC.Recordsに定義されている ref
hs
class HasField x r a | x r -> a where getField :: r -> a
型引数の意味
x は、fieldの名前
r は、Record
a は、Recordにおけるfieldの型


このようなHaskellのRecordを定義すると、
hs
data User = User { name :: Text , age :: Int }
Magic Type Classesによって、GHCが自動で以下のようなinstanceを導出する
hs
instance HasField "name" User Text where getField :: User -> Text getField = name instance HasField "age" User Int where getField :: User -> Int getField = age
これでアクセスできる
hs
{-# LANGUAGE TypeApplications #-} {-# LANGUAGE DataKinds #-} import GHC.Records (HasField (getField)) > getField @"name" (User "hoge" 42) -- "hoge" > getField @"age" (User "hoge" 42) -- 42


参考