{-# LANGUAGE LambdaCase #-}

{-|
Module      : Framework.Grammar.Lexica.SynSem
Description : Components for defining CCG lexica with catogories and λ-terms.
Copyright   : (c) Julian Grove and Aaron Steven White, 2025
License     : MIT
Maintainer  : julian.grove@gmail.com
-}

module Framework.Grammar.Lexica.SynSem where

import Framework.Grammar.CCG
import Framework.Lambda

--------------------------------------------------------------------------------
-- * Lexica with syntax and semantics

-- | A representation for expressions having both a category (@syn@) and a typed
-- λ-term (@sem@).
data SynSem = SynSem { SynSem -> Cat
syn :: Cat, SynSem -> Typed
sem :: Typed } deriving (SynSem -> SynSem -> Bool
(SynSem -> SynSem -> Bool)
-> (SynSem -> SynSem -> Bool) -> Eq SynSem
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SynSem -> SynSem -> Bool
== :: SynSem -> SynSem -> Bool
$c/= :: SynSem -> SynSem -> Bool
/= :: SynSem -> SynSem -> Bool
Eq, Int -> SynSem -> ShowS
[SynSem] -> ShowS
SynSem -> String
(Int -> SynSem -> ShowS)
-> (SynSem -> String) -> ([SynSem] -> ShowS) -> Show SynSem
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SynSem -> ShowS
showsPrec :: Int -> SynSem -> ShowS
$cshow :: SynSem -> String
show :: SynSem -> String
$cshowList :: [SynSem] -> ShowS
showList :: [SynSem] -> ShowS
Show)