-- |
-- Module      :  ELynx.Tree.Splittable
-- Description :  Splittable branch labels
-- Copyright   :  (c) Dominik Schrempf, 2021
-- License     :  GPL-3.0-or-later
--
-- Maintainer  :  dominik.schrempf@gmail.com
-- Stability   :  unstable
-- Portability :  portable
--
-- Creation date: Sat Jul 18 13:52:22 2020.
module ELynx.Tree.Splittable
  ( Splittable (..),
  )
where

-- | A data type that can be split into two equal entities.
--
-- For 'Semigroup's, the following equality should hold:
--
-- @
-- split x <> split x = x
-- @
class Splittable e where
  split :: e -> e

instance Splittable () where
  split :: () -> ()
split = () -> ()
forall a. a -> a
id