forked from GitHub/gf-rgl
Also addressing this https://github.com/GrammaticalFramework/gf-rgl/issues/238 with a README that adds a suggested implementation order.
212 lines
3.9 KiB
Plaintext
212 lines
3.9 KiB
Plaintext
resource ParadigmsTMP = open CatTMP, ResTMP, NounTMP, Prelude in {
|
|
|
|
oper
|
|
|
|
--2 Parameters
|
|
--
|
|
-- To abstract over number, valency and (some) case names,
|
|
-- we define the following identifiers. The application programmer
|
|
-- should always use these constants instead of the constructors
|
|
-- defined in $ResSom$.
|
|
|
|
Prep : Type ;
|
|
noPrep : Prep ;
|
|
|
|
-- Add more overload instances if needed for all categories!
|
|
|
|
--2 Nouns
|
|
|
|
mkN : overload {
|
|
mkN : Str -> N ; -- Predictable nouns
|
|
} ;
|
|
|
|
mkPN : overload {
|
|
mkPN : Str -> PN ; -- Proper nouns
|
|
} ;
|
|
|
|
--2 Adjectives
|
|
|
|
mkA : overload {
|
|
mkA : Str -> A ; -- Predictable adjective
|
|
} ;
|
|
|
|
mkA2 : overload {
|
|
mkA2 : Str -> A2 ; -- Predictable A2, no preposition
|
|
mkA2 : A -> Prep -> A2 ; -- A2 made from A and Prep
|
|
} ;
|
|
|
|
--2 Verbs
|
|
|
|
-- Verbs
|
|
mkV : overload {
|
|
mkV : Str -> V ; -- Predictable verb
|
|
} ;
|
|
|
|
|
|
mkV2 : overload {
|
|
mkV2 : Str -> V2 ; -- Predictable transitive verb
|
|
mkV2 : V -> Prep -> V2 ; -- V2 made from V and Prep
|
|
} ;
|
|
|
|
mkV3 : overload {
|
|
mkV3 : V -> V3 ; -- No prepositions
|
|
mkV3 : V -> Prep -> Prep -> V3 ; -- Prepositions for direct and indirect objects given
|
|
} ;
|
|
|
|
mkVV : overload {
|
|
mkVV : V -> VV ;
|
|
} ;
|
|
|
|
mkVA : overload {
|
|
mkVA : V -> VA ;
|
|
} ;
|
|
|
|
mkVQ : overload {
|
|
mkVQ : V -> VQ ;
|
|
} ;
|
|
|
|
mkVS : overload {
|
|
mkV : V -> VS ;
|
|
} ;
|
|
|
|
-- Etc. do the same for other V subcats (V2A, V2V, V2S, …)
|
|
|
|
|
|
-----
|
|
|
|
--2 Structural categories
|
|
|
|
-- If prepositions take case, add that as argument to mkPrep
|
|
mkPrep : overload {
|
|
mkPrep : Str -> Prep ;
|
|
} ;
|
|
|
|
mkConj : overload {
|
|
mkConj : (and : Str) -> Conj ; -- (coffee) and (tea)
|
|
mkConj : (either : Str) -> (or : Str) -> Conj ; -- either (coffee) or (tea)
|
|
} ;
|
|
|
|
mkSubj : overload {
|
|
mkSubj : Str -> Subj ;
|
|
} ;
|
|
|
|
mkAdv : overload {
|
|
mkAdv : Str -> Adv ;
|
|
} ;
|
|
|
|
mkAdV : overload {
|
|
mkAdV : Str -> AdV ;
|
|
} ;
|
|
|
|
mkAdA : overload {
|
|
mkAdA : Str -> AdA ;
|
|
} ;
|
|
|
|
|
|
--.
|
|
-------------------------------------------------------------------------------
|
|
-- The definitions should not bother the user of the API. So they are
|
|
-- hidden from the document.
|
|
|
|
Prep = CatTMP.Prep ;
|
|
noPrep = mkPrep [] ;
|
|
|
|
-- Add more overload instances if needed for all categories!
|
|
|
|
-- For explanation of `lin N`, see
|
|
-- https://inariksit.github.io/gf/2018/05/25/subtyping-gf.html#lock-fields
|
|
|
|
mkN = overload {
|
|
mkN : Str -> N = \s -> lin N (ResTMP.mkNoun s) ;
|
|
-- TODO: more overload instances
|
|
} ;
|
|
|
|
{-
|
|
mkPN = overload {
|
|
mkPN : Str -> PN = …
|
|
} ;
|
|
|
|
--2 Adjectives
|
|
|
|
mkA = overload {
|
|
mkA : Str -> A = \s -> …
|
|
} ;
|
|
|
|
mkA2 = overload {
|
|
mkA2 : Str -> A2 = \s -> …
|
|
mkA2 : A -> Prep -> A2 = \s -> …
|
|
} ;
|
|
|
|
--2 Verbs
|
|
-}
|
|
-- Verbs
|
|
mkV = overload {
|
|
mkV : Str -> V = \s -> lin V (mkVerb s) ;
|
|
} ;
|
|
|
|
{-
|
|
|
|
mkV2 = overload {
|
|
mkV2 : Str -> V2 = \s -> …
|
|
mkV2 : V -> Prep -> V2 = \s -> …
|
|
} ;
|
|
|
|
mkV3 = overload {
|
|
mkV3 : V -> V3 = \s -> …
|
|
mkV3 : V -> Prep -> Prep -> V3 = \s -> …
|
|
} ;
|
|
|
|
mkVV = overload {
|
|
mkVV : V -> VV = \s -> …
|
|
} ;
|
|
|
|
mkVA = overload {
|
|
mkVA : V -> VA = \s -> …
|
|
} ;
|
|
|
|
mkVQ = overload {
|
|
mkVQ : V -> VQ = \s -> …
|
|
} ;
|
|
|
|
|
|
mkVS = overload {
|
|
mkV : V -> VS = \s -> …
|
|
} ;
|
|
|
|
-- Etc. do the same for other V subcats (V2A, V2V, V2S, …)
|
|
|
|
|
|
-----
|
|
-}
|
|
|
|
-- If prepositions take case, add that as argument to mkPrep
|
|
mkPrep = overload {
|
|
mkPrep : Str -> Prep = \s -> lin Prep {s = s} ;
|
|
} ;
|
|
{-
|
|
mkConj = overload {
|
|
mkConj : (and : Str) -> Conj = \s -> …
|
|
mkConj : (either : Str) -> (or : Str) -> Conj = \s -> …
|
|
} ;
|
|
|
|
mkSubj = overload {
|
|
mkSubj : Str -> Subj = \s -> …
|
|
} ;
|
|
|
|
mkAdv = overload {
|
|
mkAdv : Str -> Adv = \s -> …
|
|
} ;
|
|
|
|
mkAdV = overload {
|
|
mkAdV : Str -> AdV = \s -> …
|
|
} ;
|
|
|
|
mkAdA = overload {
|
|
mkAdA : Str -> AdA = \s -> …
|
|
} ;
|
|
|
|
-}
|
|
--------------------------------------------------------------------------------
|
|
|
|
}
|