you're telling me a puppy coded this??
{-# LANGUAGE NoFieldSelectors #-}
{-# LANGUAGE StrictData       #-}

-- | Internal data types for representing local data in the database.
module Puppy.Types (
  Channel (..),
  Post (..),
  User (..),
  ChannelSettings (..)
) where

import Data.UUID (UUID)
import Data.Text (Text)
import qualified Crypto.PubKey.RSA as RSA

data User
  = User {
    userId      :: UUID,
    userName    :: Text,
    mainChannel :: UUID
  }

data Channel
  = Channel {
    channelId     :: UUID,
    linkedActorId :: Text,
    privateKeyPem :: RSA.PrivateKey,
    settings      :: ChannelSettings
  }

data Post
  = Post {
    postId           :: UUID,
    linkedDocumentId :: Text
  }

data ChannelSettings
  = ChannelSettings {
    autoAcceptFollows :: Bool
  }