HasField型クラス
定義
hsclass HasField x r a | x r -> a where
getField :: r -> a
型引数の意味
x
は、fieldの名前
r
は、Record
a
は、Recordにおけるfieldの型
例
hsdata User = User
{ name :: Text
, age :: Int
}
hsinstance 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
参考