{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE PatternSynonyms #-}

{-|
Module      : Analysis.Factivity.Signature
Description : Signature for factivity.
Copyright   : (c) Julian Grove and Aaron Steven White, 2025
License     : MIT
Maintainer  : julian.grove@gmail.com

Signature for factivity.
-}

module Analysis.Factivity.Signature ( contextParams
                                    , tauFact
                                    ) where

import Framework.Lambda.Convenience
import Framework.Lambda.Signature
import Framework.Lambda.Terms
import Framework.Lambda.Types
import Theory.Signature

tauFact :: Sig
tauFact :: Sig
tauFact = Sig
tau0                                                 Sig -> Sig -> Sig
forall (m :: * -> *) a b.
Alternative m =>
(a -> m b) -> (a -> m b) -> a -> m b
<||>
          Sig
tauNames                                             Sig -> Sig -> Sig
forall (m :: * -> *) a b.
Alternative m =>
(a -> m b) -> (a -> m b) -> a -> m b
<||>
          Sig
tauStates                                            Sig -> Sig -> Sig
forall (m :: * -> *) a b.
Alternative m =>
(a -> m b) -> (a -> m b) -> a -> m b
<||>
          Type -> [(String, Type)] -> Sig
mkStateSig Type
ι [ ( String
"epi"      , Type
e Type -> Type -> Type
:→ (Type
ω Type -> Type -> Type
:→ Type
t) Type -> Type -> Type
:→ Type
t )
                       , ( String
"ling"     , Type
e Type -> Type -> Type
:→ Type
t             )
                       , ( String
"phil"     , Type
e Type -> Type -> Type
:→ Type
t             ) ] Sig -> Sig -> Sig
forall (m :: * -> *) a b.
Alternative m =>
(a -> m b) -> (a -> m b) -> a -> m b
<||>
          Type -> [(String, Type)] -> Sig
mkStateSig Type
σ [ ( String
"tau_know" , Type
t                  ) ]

tauNames :: Sig
tauNames :: Sig
tauNames = \case
  Left String
"j" -> Type -> Maybe Type
forall a. a -> Maybe a
Just Type
e
  Left String
"b" -> Type -> Maybe Type
forall a. a -> Maybe a
Just Type
e
  Either String Double
_        -> Maybe Type
forall a. Maybe a
Nothing

contextParams :: [String]
contextParams :: [String]
contextParams = []