{"action":"created","issue":{"url":"https://api.github.com/repos/ramda/ramda/issues/1052","labels_url":"https://api.github.com/repos/ramda/ramda/issues/1052/labels{/name}","comments_url":"https://api.github.com/repos/ramda/ramda/issues/1052/comments","events_url":"https://api.github.com/repos/ramda/ramda/issues/1052/events","html_url":"https://github.com/ramda/ramda/issues/1052","id":71097789,"number":1052,"title":"Curry placeholder should play nice with other Ramda's and other libs","user":{"login":"paldepind","id":521604,"avatar_url":"https://avatars.githubusercontent.com/u/521604?v=3","gravatar_id":"","url":"https://api.github.com/users/paldepind","html_url":"https://github.com/paldepind","followers_url":"https://api.github.com/users/paldepind/followers","following_url":"https://api.github.com/users/paldepind/following{/other_user}","gists_url":"https://api.github.com/users/paldepind/gists{/gist_id}","starred_url":"https://api.github.com/users/paldepind/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paldepind/subscriptions","organizations_url":"https://api.github.com/users/paldepind/orgs","repos_url":"https://api.github.com/users/paldepind/repos","events_url":"https://api.github.com/users/paldepind/events{/privacy}","received_events_url":"https://api.github.com/users/paldepind/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":5,"created_at":"2015-04-26T17:40:54Z","updated_at":"2015-04-30T10:39:35Z","closed_at":null,"body":"Currently the Ramda `__`-placeholder is defined like this:\r\n\r\n```javascript\r\nmodule.exports = {ramda: 'placeholder'};\r\n```\r\n\r\nAnd it is checked for at various places with strict equality:\r\n\r\n```javascript\r\nif (arguments[idx] === __) {\r\n  // foo\r\n}\r\n```\r\n\r\nNow, consider what happens if I'm using `npm` to manage dependencies and I'm using a library, `someFnLibDepOnOldRamda`, that depends on a slightly different version of Ramda than the one I'm using myself. Then `npm` will pull in two different versions of Ramda and with them two different instances of `__`. Thus the strict equality check that Ramda uses breaks.\r\n\r\nIf pass my instance of `__` to a function from the library, curried with it's Ramda's curry it will not be recognized as a placeholder. Bam! I now have an obscure confusing bug :(\r\n\r\nOne solution: Define this placeholder like this:\r\n\r\n```javascript\r\nmodule.exports = {someSpecialPropertyName: true};\r\n```\r\n\r\nAnd check for it like this:\r\n\r\n```javascript\r\nfunction isPlaceholder(o) {\r\n  return o && o.someSpecialPropertyName === true;\r\n}\r\n```\r\n\r\nIn particular the name `someSpecialPropertyName` should _not_ include the word \"ramda\". This would make it more natural for potential other curry implementations to adopt the same placeholder \"specification\"."},"comment":{"url":"https://api.github.com/repos/ramda/ramda/issues/comments/97734798","html_url":"https://github.com/ramda/ramda/issues/1052#issuecomment-97734798","issue_url":"https://api.github.com/repos/ramda/ramda/issues/1052","id":97734798,"user":{"login":"buzzdecafe","id":716260,"avatar_url":"https://avatars.githubusercontent.com/u/716260?v=3","gravatar_id":"","url":"https://api.github.com/users/buzzdecafe","html_url":"https://github.com/buzzdecafe","followers_url":"https://api.github.com/users/buzzdecafe/followers","following_url":"https://api.github.com/users/buzzdecafe/following{/other_user}","gists_url":"https://api.github.com/users/buzzdecafe/gists{/gist_id}","starred_url":"https://api.github.com/users/buzzdecafe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/buzzdecafe/subscriptions","organizations_url":"https://api.github.com/users/buzzdecafe/orgs","repos_url":"https://api.github.com/users/buzzdecafe/repos","events_url":"https://api.github.com/users/buzzdecafe/events{/privacy}","received_events_url":"https://api.github.com/users/buzzdecafe/received_events","type":"User","site_admin":false},"created_at":"2015-04-30T10:39:35Z","updated_at":"2015-04-30T10:39:35Z","body":"something like `@@ramda/placeholder` i think. and use that as the key in non-Symbol envs"}}