packages feed

domain-optics-0.1: demo/Main.hs

{-# LANGUAGE
  QuasiQuotes, TemplateHaskell,
  FlexibleInstances, MultiParamTypeClasses,
  DataKinds, TypeFamilies,
  UndecidableInstances
  #-}
module Main
where

import Prelude
import Domain
import DomainOptics
import Optics


main =
  return ()

declare Nothing labelOpticDeriver
  [schema|

    ServiceAddress:
      sum:
        network: NetworkAddress
        local: FilePath

    NetworkAddress:
      product:
        protocol: TransportProtocol
        host: Host
        port: Word16

    TransportProtocol:
      enum:
        - tcp
        - udp

    Host:
      sum:
        ip: Ip
        name: Text

    Ip:
      sum:
        v4: Word32
        v6: Word128

    Word128:
      product:
        part1: Word64
        part2: Word64

    |]