packages feed

vinyl-0.14.1: benchmarks/Bench/SRec.hs

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleContexts      #-}
{-# LANGUAGE OverloadedLabels      #-}
{-# LANGUAGE ScopedTypeVariables   #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE GADTs #-}

module Bench.SRec where

import Data.Vinyl.SRec
import Data.Vinyl

import Bench.Rec (Fields)


mkToSRec :: Int -> SRec ElField Fields
mkToSRec i= toSRec (Field i :& Field i :& Field i :& Field i :&
                  Field i :& Field i :& Field i :& Field i :&
                  Field i :& Field i :& Field i :& Field i :&
                  Field i :& Field i :& Field i :& Field 99 :&
                  RNil)


sumSRec :: SRec ElField Fields -> Int
sumSRec str =
    get #a0 str + get #a1 str + get #a2 str + get #a3 str + get #a4 str
  + get #a5 str + get #a6 str + get #a7 str + get #a8 str
  + get #a9 str + get #a10 str + get #a11 str + get #a12 str
  + get #a13 str + get #a14 str + get #a15 str
  where
    get (label :: Label s) r =
      case rget @'(s, Int) r of
        Field v -> v
    {-# INLINE get #-}