{-# LANGUAGE UnicodeSyntax #-}
module Hach.Types where

type Nick = String
type Text = String

data S2C = SMessage Nick Text
         | SAction Nick Text
         | SSetNick Nick Text
         | SSystem Text
           deriving (Read, Show)

data C2S = CMessage Text
         | CAction Text
         | CSetNick Text
           deriving (Read, Show)

class Message α where
  text  α  String

instance Message S2C where
  text (SMessage _ τ) = τ
  text (SAction _ τ) = τ
  text (SSetNick _ τ) = τ
  text (SSystem τ) = τ

instance Message C2S where
  text (CMessage τ) = τ
  text (CAction τ) = τ
  text (CSetNick τ) = τ