[01:18:29] there's no list instance for Utt, but in such cases, you can always cheat and use a list instance for any other type that has the same lincat as Utt [01:18:39] e.g. Adv has lincat {s : Str} just like Utt [01:19:28] and yes, both can be easily coerced to Utt, http://www.grammaticalframework.org/lib/doc/synopsis/index.html#Utt [01:19:47] mkUtt Cl -> Utt [01:20:01] mkUtt(ImpForm) -> (Pol) -> Imp -> Utt [01:21:48] the bits in parentheses are optional, so if you just do mkUtt : Imp -> Utt, it will choose the default, which is mkUtt singularImpForm positivePol [03:14:06] where are Adv and Utt even defined? why aren't they in Cat.gf ? [03:14:32] they are in common/CommonX [03:14:45] now i see [03:14:46] -- Some categories are inherited from [``Common`` Common.html]. [03:14:47] -- The reason they are defined there is that they have the same [03:14:47] -- implementation in all languages in the resource (typically, [03:14:47] -- just a string). These categories are [03:14:47] -- $AdA, AdN, AdV, Adv, Ant, CAdv, IAdv, PConj, Phr$, [03:14:48] -- $Pol, SC, Tense, Text, Utt, Voc, Interj$. [03:14:50] I find that unnecessarily complicated [03:15:33] especially because if you would like to use CommonX for some but not others, you need to do the restricted inheritance thing in many places [03:16:11] "in all languages in the resource" not even true [03:33:02] so does GF unfold everything definitionally? [03:33:15] what do you mean? [03:33:18] the following function [03:33:20] ControlledCom conj cond com = C.mkAdv conj (mkUtt cond) (mkUtt com) ;-- ConjAdv [03:33:35] gives the error [03:33:36] no overload instance of ConstructorsEng.mkAdv [03:33:36] with value type Imp [03:33:36] for argument list [03:33:36] Conj Utt Utt [03:33:44] where [03:33:45] Conj Adv Adv [03:33:50] is listed as an alternative [03:34:00] sorry, I forgot the important step of explicit coercions [03:34:05] even though Utt and Adv have the same linearization? [03:34:15] mkAdj conj [03:34:35] do you mean mkAdv? [03:34:39] yes, sorry [03:34:44] tack :) [03:35:09] but the other error seems to be, that your ControlledCom function needs to return an Imp [03:39:02] so i'm confused, the <> is for coercions? [03:39:11] i would assume this should work? [03:39:11] ControlledCom conj cond com = <(C.mkAdv conj <(mkUtt cond) : Adv> <(mkUtt com) : Adv>) : Imp> ; [03:39:31] coercions, where the only thing that differs is the lock field [03:40:01] so that wouldn't work, because the lincat of Imp in English is Imp = {s : CPolarity => ImpForm => Str} ; [03:40:26] I assume that you want to keep Command open for negation? [03:40:34] ya [03:40:44] yes, so then you can't just do that [03:40:48] so id either need an if then else or something else [03:40:53] you could give Command a custom lincat [03:40:53] thanks for helping [03:41:00] with an Imp and an adv field [03:41:13] so it becomes, after calling ControlledCom [03:41:46] {imp = (the original one with "go right/don't go right/…) ; adv = unless there is an obstacle} [03:42:23] and then, when you have finally decided on polarity of the imp, you'll have a {s : Str} in both imp and adv fields, and then you can just combine them with e.g. SyntaxEng.mkAdv [03:48:47] when you say polarity, you mean it in the meta-sense, not in the GF polarity parameter [03:48:56] yes, in the GF polarity parameter [03:49:11] or like, what the GF parameter represents [03:49:51] I'm assuming that your grammar has a function that takes a Command as an argument, and either picks the negative or the positive polarity from its inflection table [03:51:15] (I am also assuming that, since your grammar is only for English for now, that such a function doesn't bother with making a difference singular/plural/polite recipient, since they are all same in English :-P) [03:52:28] but if your grammar only handles positive commands, then the lincat of Command could as well be Utt [03:56:33] an adjacent question : for words like "traffic" it can be seen as occupying a type of common noun position in sentences like "I hit traffic" vs a regular noun in sentences like "I hit the traffic" [03:56:45] i mean proper not common [03:57:24] so if i have a semantic distinction, do I need to define traffic twice, or come up with a unique lincat to deal with this ? [03:57:52] I'd solve it with an internal parameter [03:58:12] so in the lincat of your Object (or whatever), you'd have a param [03:59:04] BehavesLike = CommonNoun | MassNoun | ProperNoun | Any ; [03:59:12] or whatever distinctions you need to make [04:00:14] and then, in functions where it makes a difference, match that field and do what you need [04:00:52] alternatively, if it's just free variation, then you can even skip the parameter and add variants in your constructors [04:00:53] like [04:01:34] mkCommonOrMassNoun : N -> NP = \n -> mkNP a_Det n | mkNP n ; [04:03:33] but feel free to experiment, maybe the solution of TrafficCommon : Object ; TrafficProper : Object ; is better solution for your needs [04:04:40] a rule of thumb for me, when I'm deciding whether to encode some linguistic distinction in abstract or concrete, is whether I need to retrieve it from abstract trees [04:11:59] in the last sentence, what do you mean by "retrieve" [04:12:23] if you're doing tree transformations in haskell code [04:12:32] thats what i thought, cool [04:13:15] i feel like i'm getting better at GF and somehow still have very little common sense knowledge in terms of how to make decisions [04:13:26] that's normal! [04:13:45] often you don't even know what your application is before you've written most of it [04:29:55] are the gf summer school lectures going to be made public? [04:34:41] https://www.youtube.com/playlist?list=PL7VkoRLnYYP6EZngakW7lNNCTjfC93uh0 [04:52:07] but theyre still dont come up when you search your name for instance [04:52:21] you need the link to get access [04:55:15] also, i'm meeting with Denny Vrandečić next week [04:55:25] have you spoken with him since the summer school [04:57:15] ooh nice! [04:57:18] I haven't spoken with him [04:57:47] I don't think I have the rights to change the visibility of the videos [04:57:52] but I can pass the request to our admins [04:58:12] what's the occasion for meeting denny? [05:09:14] i wanna ask him if hes hiring [05:31:14] I see, hope that he is! [06:14:58] but i think the abstract wikipedia is kinda interesting [06:23:25] ok, so now i've tried to refactor to have the adverb as a second field [06:23:26] no overload instance of ConstructorsEng.mkUtt [06:23:26] with value type Adv [06:23:26] for argument list [06:23:26] {s : Tense => Anteriority => CPolarity => Order => Str; [06:23:26] lock_Cl : {}} [06:23:28] among alternatives [06:23:30] {s : Str; lock_S : {}} [06:23:32] {s : Tense => Anteriority => CPolarity => Order => Str; [06:23:34] lock_Cl : {}} [06:24:59] why isn't it recognizing the alternative? [07:00:39] the issue here is "with value type Adv", not "for argument list" [07:01:03] do you have the things in your code for every argument? [07:57:59] *** Quits: wmacmil (~wmacmil@2600:1700:cd90:8f10:340c:b145:c6ee:fdbd) (Ping timeout: 264 seconds) [10:08:10] *** Joins: wmacmil (~wmacmil@2600:1700:cd90:8f10:340c:b145:c6ee:fdbd) [10:09:33] this is what i changed it to, but i didn't try a proper debug yet [10:25:34] did you paste something? I'm not seeing anything [12:46:21] *** Quits: wmacmil (~wmacmil@2600:1700:cd90:8f10:340c:b145:c6ee:fdbd) (Ping timeout: 245 seconds) [13:12:19] *** Quits: ski (~ski@remote12.chalmers.se) (*.net *.split) [13:12:19] *** Quits: Flammie (~flammie@ircer.flammie.name) (*.net *.split) [13:15:33] *** Joins: ski (~ski@remote12.chalmers.se) [13:15:33] *** Joins: Flammie (~flammie@ircer.flammie.name) [13:52:27] *** Quits: esg (~emil@esg.xen.prgmr.com) (*.net *.split) [13:53:57] *** Joins: esg (~emil@esg.xen.prgmr.com) [15:58:45] *** Joins: wmacmil (~wmacmil@108-194-162-159.lightspeed.renonv.sbcglobal.net) [16:14:27] *** Quits: wmacmil (~wmacmil@108-194-162-159.lightspeed.renonv.sbcglobal.net) (Quit: Leaving) [23:44:36] *** Joins: wmacmil (~wmacmil@2600:1700:cd90:8f10:340c:b145:c6ee:fdbd)