Skip to content

Instantly share code, notes, and snippets.

@okram
Last active August 11, 2020 12:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save okram/75bfa33bf972cffd817fc62a12ea0069 to your computer and use it in GitHub Desktop.
Save okram/75bfa33bf972cffd817fc62a12ea0069 to your computer and use it in GitHub Desktop.
ex:('type' -> (nat -> (nat<=int[is>0]),
large -> (large<=int[is>99],
large<=nat[is>99]),
names -> (names:(str,str)),
user -> (user:('id'->int,'login'->str),
user<=person[put,'id',.age][put,'login',.name]),
person -> (person:('name'->str,'age'->nat),
person<=('name'->str,'age'->int),
person<=('name'->str)[put,'age',1],
person<=names-<('name'-><y>.0+<.y>.1,'age'->1),
person<=str-<('name'->_,'age'->1))))<=mm
///////////////////////////////
mmlang> :[model,'data/model/ex.mm']
mmlang> 'marko'
==>'marko'
mmlang> 'marko' => person
==>person:('name'->'marko','age'->nat:1)
mmlang> 'marko' => person => user
==>user:('id'->1,'login'->'marko')
mmlang> 'marko' => person => user-<(.login,.login)
==>('marko','marko')
mmlang> 'marko' => person => user-<(.login,.login) => person
==>person:('name'->'markomarko','age'->nat:1)
mmlang> 'marko' => person => user-<(.login,.login) => person => .age
==>nat:1
mmlang> 'marko' => person => user-<(.login,.login) => person.age => large
language error: nat:1 is not a large<=int[is,bool<=int[gt,99]]
mmlang>
////
mmlang> 'marko' => person => user-<(.login,.login) => person.age
==>nat:1
mmlang> 'marko' => person => user-<(.login,.login) => person.age => int
==>1
mmlang> 'marko' => person => user-<(.login,.login) => person.age => int => nat-<(+10,+20,+30)
==>(11,21,31)
mmlang> 'marko' => person => user-<(.login,.login) => person.age => int => nat-<(+10,+20,+30)>-
==>nat:11
==>nat:21
==>nat:31
mmlang> 'marko' => person => user-<(.login,.login) => person.age => int => nat-<(+10,+20,+30)>- => str
==>'11'
==>'21'
==>'31'
mmlang> 'marko' => person => user-<(.login,.login) => person.age => int => nat-<(+10,+20,+30)>- => str => person
==>person:('name'->'11','age'->nat:1)
==>person:('name'->'21','age'->nat:1)
==>person:('name'->'31','age'->nat:1)
mmlang>
///// IN THE FUTURE
// when you have lots of .mm files (models). you will be able to specify which functor library to use.
'marko' =social=> person =tp3=> vertex.outE[is.label=='knows'].inV =social=> person-<(.name,.ssn,.age)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment