packages feed

ruin-0.1.0.0: test/MustCompile/HRDatabase.hs

{-# Language DataKinds #-}
{-# Language DeriveGeneric #-}
{-# Language DuplicateRecordFields #-}
{-# Language FlexibleContexts #-}
{-# Language FlexibleInstances #-}
{-# Language MultiParamTypeClasses #-}
{-# Language QuasiQuotes #-}
{-# Language TemplateHaskell #-}
{-# Language TypeApplications #-}
{-# Language UndecidableInstances #-}
{-# Language ViewPatterns #-}

{-# OPTIONS_GHC -Wno-unused-top-binds #-}

module MustCompile.HRDatabase () where

import GHC.Generics (Generic)

import Data.Ruin

data Job = Baker | Carpenter | Coder | Artist
  deriving Eq

data Person = MkPerson {name :: String,age :: Int,job :: Job} deriving Generic
data Opening = MkOpening {job :: Job,company :: String} deriving Generic
data Match = MkMatch {job :: Job,company :: String,name :: String,age :: Int} deriving Generic

$(makeRecords [''Person,''Opening,''Match])

jobJoin :: [Person] -> [Opening] -> [Match]
jobJoin ps os =
  [ rto @Match (p <@ o)
  | p <- ps, o <- os, j p == j o
  ]
  where
  j (rup -> [rna|x@job|]) = x

people :: [Person]
people = [rnaA| Person (...I) name age job |]
  where
  nameI = ["Vin","Elend","Sazed"]
  ageI = (+20) <$> [1..5]
  jobI = [Baker,Carpenter]