packages feed

describe-0.3.0.0: src/Data/Serialize/Describe/Combinators/LPList.hs

module Data.Serialize.Describe.Combinators.LPList where

import Data.Serialize.Describe
import Control.Monad

newtype LPList t a 
  = LPList { unwrapLPList :: [a] }
  deriving (Show) via [a]

instance (Describe t, Describe a, Integral t) => Describe (LPList t a) where
  describe f = do
    len <- describe @t $ fromIntegral . length . unwrapLPList . f
    fmap LPList $ forM [0..fromIntegral len-1] $ \i -> describe @a $ (!! i) . unwrapLPList . f