[00:04:12] sorry, i was so tired last night i forgot to paste it . [00:04:14] ModifyCommand conj cond com = { ut = <(C.mkAdv conj <(mkUtt cond) : Adv> <({s = com.ut} ) : Adv>) : Utt>} ** { adv = ""} ; [00:04:21] the most recent incarnation [00:07:43] but i don't understand how the coercions work, the following gives a lock error [00:07:44] oper [00:07:44] advIsUtt : Adv -> Utt ; [00:07:44] advIsUtt a = ; [00:07:54] Warning: missing lock field lock_Utt [00:08:17] and i didnt see them documented in the book [00:10:02] did tu try "lin Utt" in front of it? [01:31:23] @daherb, in front of what? [03:50:09] advIsUtt a = lin Utt a [03:51:02] yeah, it's a bit confusing with the different syntaxes [03:51:26] I use when I'm giving foo as an argument to something that expects Bar [03:51:55] but in your case, you have an oper that just coerces Foo to Bar [03:52:18] then we need to actually add the lock_Bar field to the Foo [03:52:29] so that's when to use lin Bar foo [03:52:42] lin Bar {s = "hello"} [03:52:46] is exactly the same as [03:53:12] {s = "hello" ; lock_Bar = <>} [04:18:09] if you're using them regularly, and not just one-off in a single function, then I'd make helper opers [04:18:20] example following [04:50:12] https://gist.github.com/inariksit/0f9902873d18068a477e96ddd71f6561 [04:50:24] got distracted with my actual work :-D [04:52:34] well actually, providing GF documentation is also a real part of my job! [04:52:54] I expect to copy and paste the latest logs from here into a blog post at some point [05:44:21] tack, inari [05:44:31] tack som alltid [05:45:13] hope it helps! the previous hints were not really the complete picture [05:45:35] I think I usually use the hack when just want to return a Bar [05:45:46] and not actually in the end return another Foo [05:46:02] so I didn't think of explaining the lin Foo thing [06:50:00] now i'm getting a type error [06:50:08] when i try to adjust your code to mine [06:50:09] type of and_Conj [06:50:09] expected: Str [06:50:09] inferred: {lock_Conj : {}; n : ParamX.Number; s1 : Str; s2 : Str} [06:51:06] ModifyCommand conj cl imp = [06:51:07] let clUtt : Utt = mkUtt cl ; [06:51:07] impUtt : Utt = mkUtt imp ; [06:51:07] fakeAdv : Adv = [06:51:07] mkAdv conj [06:51:08] [06:51:10] ; [06:51:12] in lin Utt fakeAdv ; [06:51:41] sorry with the and_Conj replaced [06:56:32] nvm i think it was calling the wrong mkAdv [07:00:35] it finally works, tack [07:02:24] yay! [09:00:14] *** Quits: wmacmil (~wmacmil@2600:1700:cd90:8f10:340c:b145:c6ee:fdbd) (Quit: Leaving) [22:24:16] *** Quits: step21 (~step21@apus.uberspace.de) (Read error: Connection reset by peer) [22:27:13] *** Joins: step21 (~step21@apus.uberspace.de)