flat icon indicating copy to clipboard operation
flat copied to clipboard

Missing Generically instance

Open Icelandjack opened this issue 2 years ago • 1 comments

Can you add an instance for Generically (base 4.17)?

Older versions are supported with the generically package:

import GHC.Generics.Generically

instance (Generic a, GFlatEncode (Rep a), GFlatDecode (Rep a), GFlatSize (Rep a)) => Flat (Generically a) where
  encode :: Generically a -> Encoding
  encode (Generically a) = gencode (from a)

  decode :: Get (Generically a)
  decode = Generically . to <$> gget

  size :: Generically a -> NumBits -> NumBits
  size (Generically !x) !n = gsize n (from x)

This gives a type that represents the generic Flat definition. You can derive Flat via it:

{-# Language DeriveGeneric #-}
{-# Language DerivingVia   #-}

import Flat
import GHC.Generics

data Direction = North | South | Center | East | West
  deriving stock Generic
  deriving Flat via Generically Direction 

Users can modify the generic behaviour by defining wrappers, via Generically (Override .. '[A `As` A', B `As` B', ..]).

Icelandjack avatar Nov 16 '22 15:11 Icelandjack