{"action":"created","issue":{"url":"https://api.github.com/repos/keean/zenscript/issues/14","repository_url":"https://api.github.com/repos/keean/zenscript","labels_url":"https://api.github.com/repos/keean/zenscript/issues/14/labels{/name}","comments_url":"https://api.github.com/repos/keean/zenscript/issues/14/comments","events_url":"https://api.github.com/repos/keean/zenscript/issues/14/events","html_url":"https://github.com/keean/zenscript/issues/14","id":179109775,"number":14,"title":"Orthogonal concepts","user":{"login":"shelby3","id":247731,"avatar_url":"https://avatars.githubusercontent.com/u/247731?v=3","gravatar_id":"","url":"https://api.github.com/users/shelby3","html_url":"https://github.com/shelby3","followers_url":"https://api.github.com/users/shelby3/followers","following_url":"https://api.github.com/users/shelby3/following{/other_user}","gists_url":"https://api.github.com/users/shelby3/gists{/gist_id}","starred_url":"https://api.github.com/users/shelby3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shelby3/subscriptions","organizations_url":"https://api.github.com/users/shelby3/orgs","repos_url":"https://api.github.com/users/shelby3/repos","events_url":"https://api.github.com/users/shelby3/events{/privacy}","received_events_url":"https://api.github.com/users/shelby3/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":47,"created_at":"2016-09-25T21:22:09Z","updated_at":"2016-10-05T16:02:26Z","closed_at":null,"body":"I am trying to nail down in my mind, the fundamental _orthogonal_ semantic concepts of our proposed programming language.\r\n\r\nConcept | Description\r\n------------|----------------\r\n`data` | [Unified sum, product, recursive, and record](https://github.com/keean/zenscript/issues/11) data types. No early bound operations other than construction and access. Record types may optionally be mutable.\r\n`typeclass` | Delayed binding of operations to types at the use-site. Contrast to OOP (subclassing) which binds operations at construction of objects. For polymorphic types, typeclass objects delays binding operations until construction of the typeclass object (instead of prematurely binding operations at the construction of an instance of the implementing type); whereas, [my posited and proposed solution to the Expression Problem](https://github.com/keean/zenscript/issues/15) employing unions, in theory further delays binding to the use-site for polymorphic types. Note that delaying is a positive attribute in this context, because it increases degrees-of-freedom.\r\n`module` | Encapsulating `data` with compile-time (statically) bound operations and access control, enabling more sophisticated types.\r\nmonadic effect system | https://github.com/keean/zenscript/issues/4#issuecomment-248569044\r\n\r\nThus I am wondering if `module` is the most apt name for the concept? I think of a module as a unit of code that is imported separately. We still need to import `data` and `typeclass`, so is this done by files? Isn't each file then a module? If so, what is the apt name for the concept of `module` above? I am thinking the above concept for `module` is really a `class` (without the subclassing inheritance anti-pattern). Can't `modules` extend other modules?\r\n\r\nEdit: note also [OCaml functors and modules](https://github.com/keean/zenscript/issues/13#issuecomment-249446270)."},"comment":{"url":"https://api.github.com/repos/keean/zenscript/issues/comments/251718944","html_url":"https://github.com/keean/zenscript/issues/14#issuecomment-251718944","issue_url":"https://api.github.com/repos/keean/zenscript/issues/14","id":251718944,"user":{"login":"keean","id":508384,"avatar_url":"https://avatars.githubusercontent.com/u/508384?v=3","gravatar_id":"","url":"https://api.github.com/users/keean","html_url":"https://github.com/keean","followers_url":"https://api.github.com/users/keean/followers","following_url":"https://api.github.com/users/keean/following{/other_user}","gists_url":"https://api.github.com/users/keean/gists{/gist_id}","starred_url":"https://api.github.com/users/keean/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keean/subscriptions","organizations_url":"https://api.github.com/users/keean/orgs","repos_url":"https://api.github.com/users/keean/repos","events_url":"https://api.github.com/users/keean/events{/privacy}","received_events_url":"https://api.github.com/users/keean/received_events","type":"User","site_admin":false},"created_at":"2016-10-05T16:02:26Z","updated_at":"2016-10-05T16:02:26Z","body":"```\r\ntypeclass ForwardOrder<A> extends LessThan<A>\r\ntypeclass ReverseOrder<A> extends LessThan<A>\r\nInt implements ForwardOrder\r\n   lessThan(x) => this <= x\r\nInt implements ReverseOrder\r\n   lessThan(x) => this >= x\r\n```\r\nAgain not allowed because:\r\n\r\nlessThan can only have _one_ definition for `Int`\r\n"}}
{"actor":{"display_login":"keean"}}