Fork me on GitHub
#clojurescript
<
2016-11-29
>
mfikes00:11:10

@bja if nothing else, there is cljs.core/simple-benchmark

kingoftheknoll02:11:48

Does anyone have recommendations for datetime library’s for cljs? Ideally something that I can convert to an #inst to send over transit.

kingoftheknoll02:11:59

actually looks like transit takes a js date object

danielcompton02:11:37

Then you get to use goog.UtcDateTime's which are probably more ideal

kingoftheknoll03:11:45

Thanks for this!

anmonteiro04:11:53

@bbloom: If I correctly understood your question, I would go with Om Next's tempids, but I'm biased :-)

bbloom04:11:27

my experience has been that “temporary” ids are kinda awkward vs “permanent” ids

bbloom04:11:29

does om.next keep a permanent mapping of tempids? or are those ids invalidated after a transaction?

anmonteiro04:11:17

They're invalidated after a remote transaction

anmonteiro04:11:39

You should return a mapping from tempid->real id from the txn

anmonteiro04:11:58

And Om Next replaces them for you

bbloom04:11:49

yeah, but that means you can’t leak any tempids outside of the transaction context, like if you want to store a pointer in some cache or something

anmonteiro04:11:22

Depends, you can always choose to keep the mappings around

bbloom04:11:39

so as far as i can tell, relay puts a dataId__ on every object

bbloom04:11:51

which is sort of the “real” id behind the scenes

bbloom05:11:21

that sorta matches what i did for another project post-react, pre-relay in js, only i made the real id public/explicit

bbloom05:11:44

essentially i had every node in the graph labeled with a “lid” (local id) and optionally a “gid” (global id)

bbloom05:11:06

then used lids everywhere i could, except when sending messages to the server & translated at the network level

bbloom05:11:25

worked out reasonably well, but you had to be aware of the distinction, which was occasionally tricky

bbloom05:11:54

but seems much nicer than having to specify or translate temporary ids manually

anmonteiro06:11:54

Right, but I think we're talking about slightly different things

anmonteiro06:11:44

In Om Next, tempids are supposed to only exist until they're persisted

anmonteiro06:11:17

After which they're automatically replaced by the real ids for the persisted data that the server returns

biscuitpants06:11:57

is it possible to use 2 different versions of the same library in cljs?

biscuitpants06:11:20

reason i’m asking - c3js (the charting library) uses v3 of d3js. but, we are now needing to use v4 of d3js.

biscuitpants06:11:15

(i could also be going around this the completely wrong way)

thheller08:11:33

@biscuitpants if you do it manually yes, but you really don't want to do this to your users. is v3 completely incompatible with v4?

biscuitpants08:11:52

yep, they made a lot of breaking api changes

thheller08:11:58

but I assume everything is still under the d3 global? or is that d4 then?

thheller08:11:46

oh no, they went down the modular path

thheller08:11:54

that is not going to be fun for you

biscuitpants08:11:00

i know already 😕

thheller08:11:45

you are probably going to need a JS tool like webpack or rollup

thheller08:11:10

and then make that expose things as d3_v4 or so

biscuitpants08:11:07

hmm okay. i will take a look at webpack / rollup

thheller08:11:43

or package the d3 v3 with c3js together

biscuitpants08:11:25

hmm that may actually be a much better idea. but won’t the closure compiler still munge it’s namespaces?

thheller08:11:34

hmm you want to keep those things far away from the CLJS/Closure compiler

robert-stuttaford08:11:30

this way lies madness and despair

thheller08:11:51

I guess my plan would be to bundle d3.v3 + c3js into one js file that is scoped and only exposes the c3js object

thheller08:11:04

if that even works, javascript build tools are scary

biscuitpants09:11:34

ha, they are indeed. seems like one hell of a lot of work, for a seemingly small advantage.

biscuitpants09:11:49

there is an open PR for d3 v4 on c3js Github, maybe that is in a workable state

vikeri12:11:17

Can I somehow permanently redefine/overwrite a function? Like with-redef but permanent and global. When I’m testing with-redef works well for sync tests but with asynchronicity it doesn’t apply.

thheller13:11:04

@vikeri set! should work

urbanslug13:11:10

Hey is there any integration testing lib any of you recommend?

rovanion17:11:05

I'm having an issue where we want to request data from a domain other than "localhost" when developing with figwheel. But I can't find anything on adding a CORS header to figwheels responses. Does anyone know how to do this?

vikeri19:11:17

@metametadata sweet! I'll check it out tomorrow.

ag20:11:02

I need to pass on-click function through params, via a def that’s declared in a different namespace. Can someone help me with correct quoting syntax? something like

{:options {:on-click (fn [e] (js/console.info “clicked”)}}

ag20:11:04

so I can attach that to a sablono element directly: e.g.: (sablono.core/html [:a (:options foo)])

bbloom20:11:45

create-ns and alias seem relatively useful for spec, but clojurescript doesn’t really support these - any good alternative other than verbose keywords? (alexmiller sent me here from #clojure-spec)

thheller20:11:02

@bbloom I just create files with only (ns ...) and :require them as usual, typically as the specs evolve those files become useful anyways

thheller20:11:48

but then again. I usually put all specs in dedicated files

bbloom20:11:00

@thheller that’s what i was doing, but annoyingly, it would now either A) create a cyclic import or B) require i split stuff out in to a namespace just for the shared stuff

bbloom20:11:26

i’m probably going to do B, but it would require changing all the namespaces & a bunch of test data files will need to be munged too

bbloom20:11:59

i was doing create-ns / alias to break the cyclic import

thheller20:11:11

yeah we can't do that due to Closure

bbloom20:11:23

i don’t actually need the ns tho

bbloom20:11:28

i just need the alias for the reader

dnolen20:11:39

@bbloom I’m pretty sure there was discussion about this, it really needs to be handled in Clojure first

bbloom20:11:41

my best thought now is just a macro that adds the alias to the compiler env

dnolen20:11:43

aliases w/o nses

dnolen20:11:00

ideally you can just do this in your ns form

bbloom20:11:04

@dnolen alex miller had mentioned having alias auto-create the ns

bbloom20:11:13

but yeah, having a static way to do it would be nice

bbloom20:11:22

instead of :require, just having like :alias in there

dnolen20:11:35

that’s not really a good idea

dnolen20:11:45

destroys a whole bunch of validation

dnolen20:11:11

anyways IMO needs fixing in Clojure

bbloom20:11:11

could you elaborate?

bbloom20:11:21

what validation is broken by what exactly?

dnolen20:11:08

sorry probably have no idea what you’re talking about - is :alias a thing at the ns form level?

dnolen20:11:11

I didn’t think so

bbloom20:11:31

ok let me back up

bbloom20:11:55

i have some namespace 'foo.core and an implementation ns ‘foo.impl

bbloom20:11:14

although foo is acutally much longer, so like ‘blah.foo.bar.baz.impl

bbloom20:11:40

so in the impl, i have: (create-ns ‘foo.core) (alias ‘f ‘foo.core)

bbloom20:11:47

so now i can do ::f/blah in the impl

bbloom20:11:59

that works great for clj, but for cljs, i can’t do that

bbloom20:11:04

and i can’t just :require foo.core w/o a cycle

dnolen20:11:07

right, Clojure-isms

dnolen20:11:22

create-ns would just be goofy IMO

dnolen20:11:30

alias ok, something to consider

bbloom20:11:35

yeah, i agree it’s not quite right for cljs

dnolen20:11:08

but to be honest this is better to just fix across Clojure/ClojureScript

dnolen20:11:14

Clojure needs it too

dnolen20:11:17

that pattern is gross

bbloom20:11:01

consider my comments here 1) a vote for figuring out a solution to this

bbloom20:11:08

and 2) a request for help with my immediate problem

bbloom20:11:21

my thought re #2 is to just make my own alias macro that fiddles with the cljs env

dnolen20:11:36

in order for alias to work should probably tweak what @anmonteiro did for require

bbloom20:11:47

i’m thinking about just doing a set! on cljs.tools.reader/*alias-map*

dnolen20:11:05

if we fix that, then I’m ok with alias but I would prefer to fix this at the ns form

dnolen20:11:13

so we don’t need reader conditionals for this stuff

bbloom20:11:23

yeah, that’s what i meant by a “static” solution

bbloom20:11:32

and an :alias clause

bbloom20:11:40

(ns foo.impl (:alias f coo.core))

bbloom20:11:14

@alexmiller may be interested in this discussion, with respect to the alias/create-ns patch he had for clj

alexmiller20:11:00

I have a patch for alias in Clojure that allows it to create the namespace automatically. that’s ready for Rich to look at, but I’m not sure if he will like it or not.

bbloom20:11:32

right, but alias is still a dynamic operation & non-bootstrapped cljs needs a static one too

alexmiller20:11:14

Adding ns support to invoke it is the next step and I’d be in favor of it, but Rich did not seem sold on it the last time we talked about it. Didn’t necessarily seem against it either but was just still thinking about it.

alexmiller20:11:51

I’m just talking about where we are in Clojure land atm

alexmiller20:11:13

that will not translate perfectly into ClojureScript but should inform it

bbloom20:11:24

thanks. i’m hacking up a temporary solution now - i’ll share it when i’m done, for whatever that’s worth

dnolen20:11:14

@bbloom yeah curious if that set! is all you need

bbloom20:11:24

it would be nice if clojure proper supported :refer-macros too

bbloom20:11:28

even if it just did the same thing as :refer

bbloom20:11:33

my ns forms are getting hairy in my cljc files

dnolen20:11:11

@bbloom seems less likely which is why we added :refer support for macros in ClojureScript - not sure if you missed that

bbloom20:11:35

@dnolen i thought you did that, but doesn’t seem to work

dnolen20:11:41

it definitely works

bbloom20:11:43

i still can’t have one cljc file with and without macros in it, right?

dnolen20:11:04

right if you want it all to be in one file than you need to conditionalize the macros

dnolen20:11:08

but that’s it

bbloom20:11:24

hmm, i have a util file with one macro in it and wrapped the macro with #?(:clj …)

dnolen20:11:25

the cljs part of the cljc file can self-require

bbloom20:11:32

but i get does not exist error still

dnolen20:11:31

oh sorry, no if you want everything to be in one .cljc file you can’t self-reqiure or you’ll stack overflow

dnolen20:11:46

:refer support is really about downstream users of your lib

dnolen20:11:09

after you’ve dealt with the macro issues yourself

bbloom20:11:00

but if i do :require on a .clj for just macros, taht doesn’t work either

dnolen20:11:37

@bbloom yes, sorry I was mistaken - you’re doing something for yourself - this doesn’t work that well

bbloom20:11:59

yeah, the macro story for cljs is still not great

dnolen20:11:02

the :refer stuff I was talking about was to make it easier for someone to consume your thing without dealing with cljs/clj differences

bbloom21:11:09

i’m really confused how this all works still tho

bbloom21:11:23

i tried to do :use-macros and i got undeclared var warnings suggesting this .clj file was loaded as cljs

dnolen21:11:29

@bbloom seems weird, haven’t heard anybody else complain about that

thheller21:11:43

(ns my.ns #?(:cljs (:require-macros [my.ns :as m]))) and then use m/my-macro when inside my.ns

bbloom21:11:45

you know i’m a savant idiot 😛

thheller21:11:45

that should work no?

bhagany21:11:27

fwiw, I’ve seen the errors @bbloom is talking about while fumbling around.

bbloom21:11:35

i don’t need to use the macro in the same ns i’ve defined it

dnolen21:11:49

minimal reproducer preferred to anecdotes of fumbling about 🙂

thheller21:11:52

then that should work

bbloom21:11:06

@dnolen the issue is that any minimal repo i give you will be obviously wrong to you

bhagany21:11:06

not reporting a bug, until now I just assumed it was me

bbloom21:11:16

this is a usability bug, not an impl bug

dnolen21:11:03

well we’re definitely unlikely to spend anymore time on the macro stuff - however if there’s a better error message to emit - interested in that

bbloom21:11:15

ok so let’s say i have namespace ‘foo.core and ‘foo.util

bbloom21:11:23

util has some functions and now, i want to put one macro in util

bbloom21:11:30

let’s call the macro mac

bbloom21:11:40

and some util function func

bbloom21:11:56

what do i need to put in the ns forms of core and util in order to use either mac or func from core

thheller21:11:16

(ns foo.util (:require-macros [foo.util :as m]))

bbloom21:11:31

thheller can i refer to a macro w/o an alias?

thheller21:11:36

(ns foo.core (:require [foo.util :as util])) then (util/mac)

bbloom21:11:45

what is the syntax for that?

thheller21:11:48

just a habit I do

thheller21:11:57

(:require-macros [foo.util])

bbloom21:11:09

oh, i want a refer

thheller21:11:24

(ns foo.core (:require [foo.util :as util :refer (mac)]))

thheller21:11:45

just as in clojure

bbloom21:11:52

ok i have tried all of these that you’ve suggested and get errors every which way - let me be clear about what i’ve tried & how it failed

bbloom21:11:06

(ns ambiparse.util
  #?(:cljs (:require-macros [ambiparse.util :refer [reader-alias]])))

thheller21:11:23

that can't refer

bbloom21:11:46

if i do that, i get:

bbloom21:11:47

Could not parse ns form ambiparse.util Invalid :refer, macro ambiparse.util/reader-alias does not exist

bbloom21:11:57

reader-alias is deifned in ambiparse.util.cljc as:

bbloom21:11:59

#?(:clj (defmacro reader-alias .....

thheller21:11:47

let me check

dnolen21:11:50

@bbloom that looks ok to me

bbloom21:11:12

it definitely doesn’t work correctly in planck - but i’ll try it w/ a non-bootstrapped compiler

dnolen21:11:39

@bbloom all this ns stuff had to be redone for bootstrapped

dnolen21:11:57

so if it doesn’t work - no surprises there - needs time

thheller21:11:41

(ns ambiparse.util
  #?(:cljs (:require-macros [ambiparse.util :refer [reader-alias]])))

(defn func [])

#?(:clj
   (defmacro reader-alias [& args]
     :mac))

(prn (reader-alias :foo))

dnolen21:11:43

super annoying but no way to avoid this since code loading is completely async in JS

thheller21:11:45

works just fine for me

thheller21:11:17

but I'm on shadow-build .. cannot verify whether this works for cljs proper

dnolen21:11:33

that should work fine

dnolen21:11:41

all bets are off if you’re using Planck

bbloom21:11:00

what should i use if i just want a basic repl to work against?

dnolen21:11:20

@bbloom you probably found a bootstrap bug

dnolen21:11:54

just file it with Planck, @mfikes patches flow through quickly

bbloom21:11:38

i’ll take that emoji to mean that @mfikes will look at it 😛

bbloom21:11:07

is there any easy to set up non-bootstrapped repl? or do i need to build it myself from the source?

bbloom21:11:17

or jsut use cljs.jar or whatever

dnolen21:11:38

if all you need is a REPL, yeah cljs.jar works

dnolen21:11:50

just won’t be nearly so snappy

bbloom21:11:57

is there a 1.9 alpha jar?

mfikes21:11:00

Simplest way @bbloom is java -jar cljs.jar -m cljs.repl.node

bbloom21:11:50

you forgot a rlwrap 😉

bbloom21:11:43

argh. classpath nonsense now 😕 can’t win

thheller21:11:45

lein run -m cljs.repl.node should work

bbloom21:11:52

yeah, that does work

bbloom21:11:03

but i’m doing:

bbloom21:11:04

cljs.user=> (require 'ambiparse.gll) clojure.lang.ExceptionInfo: Could not locate ambiparse/util__init.class or ambiparse/util.clj on classpath. in file ambiparse/util.cljc {:tag :cljs/analysis-error}

bbloom21:11:27

that’s the self require-macros is looking for .clj instead of cljc

thheller21:11:22

uhm you sure its on the classpath?

dnolen21:11:30

pretty sure not on the classpath

bbloom21:11:47

yeah, if i remove the require-macros from the util ns it finds it but can’t find the macro itself

bbloom21:11:53

it’s definitely on the classpath

mfikes21:11:03

rlwrap java -cp cljs.jar:src clojure.main -m cljs.repl.node

thheller21:11:17

lein repl and (require 'ambiparse.util) works?

bbloom21:11:38

ok , i think i finally got it w/ mfikes’ command line

bbloom21:11:22

the error message seems misleading tho, b/c the classpaths are identical, i’m nto sure what’s different between what i was just doing and that command

dnolen21:11:49

what were you doing?

bbloom21:11:03

i just cd’d in to src and ran it from there

bbloom21:11:12

require worked, but not for macros

thheller21:11:25

current path is not automatically on the classpath

bbloom21:11:43

(require ‘ambiparse.util) which internally has #?(:cljs (:require-macros [ambiparse.util]))

bbloom21:11:11

@thheller but the cljs compiler looks in current dir anyway?

bbloom21:11:20

b/c it loads the cljc if i removed the require-macros

thheller21:11:19

not sure actually

dnolen21:11:24

@bbloom I’m honestly amazed that anything worked at all

bbloom21:11:34

there’s a lot of problems here & they compound to make it hard to talk about

bbloom21:11:46

for example, right now i added a (throw (Exception. “blah”)) to the body of my macro

bbloom21:11:56

and it throws, but then i remove it, and try again, and it still throws

bbloom21:11:06

so i do a require with :reload-all but it still throws

bbloom21:11:29

and via cljs.jar, i have no way to easily access the clj env to forcibly reload the ns on the clj side

dnolen21:11:34

yeah I don’t know how require worked at all with a bad classpath like that

bbloom21:11:44

no this is now w/ a good classpath

bbloom21:11:02

cljs repl require doesn’t reload the clj ns from what i can tell

bbloom21:11:06

reload-all anyway

dnolen21:11:11

I just mean your previous attempts

dnolen21:11:26

:reload-all should work but in this case I wouldn’t rule out a regression

bbloom21:11:11

~/Projects/ambiparse (cljs!) $ rlwrap java -cp cljs.jar:src clojure.main -m cljs.repl.node ClojureScript Node.js REPL server listening on 50247 To quit, type: :cljs/quit cljs.user=> (require 'http://ambiparse.wtf :reload-all) Error: No protocol method ISwap.-swap! defined for type cljs.core/Atom: [object Object] at Object.cljs$core$missing_protocol [as missing_protocol] (/Users/bbloom/Projects/ambiparse/.cljs_node_repl/cljs/core.js:309:9) at Function.cljs.core.swapBANG_.cljs$core$IFn$invoke$arity$4 (/Users/bbloom/Projects/ambiparse/.cljsnode_repl/cljs/core.js:3054:17) at Function.cljs.core.swap_BANG_.cljs$core$IFn$invoke$arity$4 (/Users/bbloom/Projects/ambiparse/.cljsnode_repl/cljs/core.js:15681:30) at cljs$core$swap_BANG_ (/Users/bbloom/Projects/ambiparse/.cljs_node_repl/cljs/core.js:15642:29) at cljs$spec$def_impl (/Users/bbloom/Projects/ambiparse/.cljs_node_repl/cljs/spec.js:912:22) at Object.<anonymous> (/Users/bbloom/Projects/ambiparse/.cljs_node_repl/cljs/spec.js:4572:20) at Module._compile (module.js:573:32) at Object.Module._extensions..js (module.js:582:10) at Module.load (module.js:490:32) at tryModuleLoad (module.js:449:12)

bbloom21:11:27

all that ns does is load the util ns & nothing else

dnolen21:11:29

@bbloom hrm actually you probably found a bug wrt. :reload/:reload-all in the self require case

bbloom21:11:44

indeed, i believe i did 🙂

bbloom21:11:04

the minimal repo is exactly the self-require we discussed above

dnolen21:11:55

yeah I glanced at the :reload/:reload-all logic and I think I see how this could happen - filed an issue http://dev.clojure.org/jira/browse/CLJS-1863

bbloom21:11:26

there also seems to be a bug with print statements in macro bodies

bbloom21:11:37

sometimes i get output, sometimes i don't

bbloom21:11:44

not quite sure what governs it yet

bbloom21:11:13

if in my util ns i do (defmacro mac [] (prn 1)) (note no syntax quote) then from the wtf directory, try to call the macro

bbloom21:11:18

the first time i load the module, no print of 1

bbloom21:11:48

but if i comment out the macro, reload, no print (as expected) then uncomment it back in and reload, it prints now

bbloom21:11:58

seems like the initial load is with-out-str-ing something somewhere

dnolen21:11:54

need more information about that

dnolen21:11:04

particularly whether this is REPL or non-REPL thing

dnolen21:11:09

1863 is a fundamental case

bbloom21:11:10

cljs.jar repl

dnolen21:11:23

what I mean is you need to isolate it

bbloom21:11:27

sure, let me make a repo of this

dnolen21:11:30

compare REPL vs. build

dnolen21:11:40

or watch or whatever

thheller21:11:30

@bbloom prn during compilation ends up in the generated js

bbloom21:11:49

@thheller yup, but it shouldn’t 😛

bbloom21:11:06

i like to put print statements in my macros to debug them

thheller21:11:08

cljs.util/debug-prn

bbloom21:11:48

ok will try that

bbloom21:11:08

is there a cljs-level form to force a clj-level reload?

thheller21:11:08

it just prints to *err* instead of *out* since cljs uses that

thheller21:11:21

(require-macros 'foo.util :reload) maybe?

bbloom21:11:53

nah, that won’t parse

thheller21:11:47

(require '[foo.util :include-macros true] :reload) might work, I really have no idea though

thheller21:11:01

don't use that stuff on the REPL usually 😛

bbloom21:11:17

does nobody actually use cljs w/o figwheel? lol

dnolen21:11:27

(require-macros 'foo.util :reload) should work

dnolen21:11:47

I use the Node.js REPL all the time, and I use this stuff

bbloom21:11:54

@dnolen ha! that gives me the same classpath error i was getting before:

bbloom21:11:55

cljs.user=> (require-macros 'foo.util :reload) clojure.lang.ExceptionInfo: Could not locate foo/util__init.class or foo/util.clj on classpath. at line 1 <cljs repl> {:file "<cljs repl>", :line 1, :column 1, :root-source-info {:source-type :fragment, :source-form (require-macros (quote foo.util) :reload)}, :tag :cljs/analysis-error}

bbloom21:11:02

oo lol nevermind

bbloom21:11:04

i’m an idiot

dnolen21:11:08

same issue

bbloom21:11:09

copy pasted your code, didn’t use my ns

bbloom21:11:19

ok that does work

dnolen21:11:45

yeah I did a bunch of work to make sure :reload/:reload-all works as expected

bbloom21:11:50

awesome, thanks

dnolen21:11:51

so 1863 will definitely get addressed

dnolen21:11:06

I don’t do any real testing with any other tooling

dnolen21:11:10

so I use all this stuff

bbloom21:11:41

i feel like i’m about to sound like a crazy person, but i’m running in to all sorts of weirdness with debug-prn and some kind of caching or something w/ the reload

bbloom21:11:49

i’m going to make a video to explain it

thheller22:11:27

that looks weird indeed

thheller22:11:34

probably :reload combined with some cache issues

bbloom22:11:39

yeah, there’s definitely a cache issue with self-require / macros

bbloom22:11:06

i’m finding that ihave to kill repl, do rm -rf .cljs_node_repl, and then restart to get stuff to work

bbloom22:11:26

here’s my macro that i finally got working for the sake of spec in cljs w/ an alias

bbloom22:11:27

(defmacro reader-alias [alias namespace-sym]
  (create-ns namespace-sym)
  (clojure.core/alias alias namespace-sym)
  (when (find-ns 'cljs.env)
    (let [compiler (find-var 'cljs.env/*compiler*)
          cljs-ns (find-var 'cljs.analyzer/*cljs-ns*)]
      (swap! @compiler assoc-in
             [:cljs.analyzer/namespaces @cljs-ns :requires alias]
             namespace-sym)))
  nil)

bbloom22:11:03

that actually works @dnolen

bbloom22:11:26

adding an :alias form to the ns macro should be very easy - happy to provide a patch if you can talk rich in to it 😛

thheller22:11:34

hmm I don't think that will work

alexmiller22:11:51

it sounds like Rich does not necessarily want to add :alias to ns

thheller22:11:14

@bbloom this will possibly corrupt the cache

thheller22:11:31

as is adds a :requires that might the cyclic

thheller22:11:29

clojure.tools.reader/*alias-map* maybe is a better target (as david suggested)

bbloom22:11:51

i tried that, but the analyzer overrides it with that value in that compiler atom path

thheller22:11:39

hmm right the binding is reset for each form

bbloom22:11:45

ok anyway - i’m giving up on this & just making another namespace for specs & other namespaced keywords - and paying the non-trivial vim/grep/sed costs

bbloom22:11:29

for the record, i find namespaced keywords to be a lot more trouble than they are worth

bbloom22:11:36

ditto for xml namespaces 😉

thheller22:11:31

I ran into the very same issue yesterday when I wanted to use :something/x instead of :something.impl.foo/x

thheller22:11:52

so your (:alias {f foo.core}) suggestion sounded really good right now

thheller22:11:54

for ns that is (alias 'f 'foo.core) would probably require a special form