{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE NoMonomorphismRestriction #-} {-# LANGUAGE TypeFamilies #-} -- These can go if the tuple instances are accepted upstream. {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE DataKinds #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Generics ( Generic(..), to_tuple ) where import Generics.SOP ( Code, Generic(..) ) import Generics.SOP.TH ( deriveGeneric ) deriveGeneric ''(,,,,,,,,,,,,,,,) deriveGeneric ''(,,,,,,,,,,,,,,,,) deriveGeneric ''(,,,,,,,,,,,,,,,,,) deriveGeneric ''(,,,,,,,,,,,,,,,,,,) deriveGeneric ''(,,,,,,,,,,,,,,,,,,,) -- 20 deriveGeneric ''(,,,,,,,,,,,,,,,,,,,,) deriveGeneric ''(,,,,,,,,,,,,,,,,,,,,,) deriveGeneric ''(,,,,,,,,,,,,,,,,,,,,,,) deriveGeneric ''(,,,,,,,,,,,,,,,,,,,,,,,) deriveGeneric ''(,,,,,,,,,,,,,,,,,,,,,,,,) -- 25 deriveGeneric ''(,,,,,,,,,,,,,,,,,,,,,,,,,) deriveGeneric ''(,,,,,,,,,,,,,,,,,,,,,,,,,,) deriveGeneric ''(,,,,,,,,,,,,,,,,,,,,,,,,,,,) deriveGeneric ''(,,,,,,,,,,,,,,,,,,,,,,,,,,,,) deriveGeneric ''(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) -- 30 -- | Convert a simple product type into a tuple, generically. -- -- == __Examples__: -- -- >>> import qualified GHC.Generics as GHC ( Generic ) -- >>> data Foo = Bar Int Int Int Int deriving (Show, GHC.Generic) -- >>> instance Generic Foo -- >>> let b = Bar 1 2 3 4 -- >>> to_tuple b :: (Int,Int,Int,Int) -- (1,2,3,4) -- to_tuple:: (Generic a, Generic c, Code a ~ Code c) => a -> c to_tuple = to . from