repos / handle-examples.hs.git


handle-examples.hs.git / vinyl-handle / domain
Evgenii Akentev  ·  2021-01-09

HandleRec.hs

 1{-# LANGUAGE TypeApplications #-}
 2{-# LANGUAGE DataKinds #-}
 3{-# LANGUAGE RankNTypes #-}
 4{-# LANGUAGE ScopedTypeVariables #-}
 5{-# LANGUAGE FlexibleContexts #-}
 6{-# LANGUAGE GADTs #-}
 7{-# LANGUAGE AllowAmbiguousTypes #-}
 8
 9module HandleRec where
10
11import Data.Vinyl
12
13type HandleRec rs = Rec ElField rs
14
15getMethod
16  :: forall l us v record . (HasField record l us us v v, RecElemFCtx record ElField)
17  => record ElField us -> v
18getMethod = getField . rgetf (Label @l)