<companion_cube>
Bluddy: you can use combinators in addition to ppx_deriving
<companion_cube>
for this kind of situation
nojb has joined #ocaml
<Bluddy>
companion_cube: i have a complex data structure that contains maps of sets inside it. I was hoping to simplify the stringification with ppx_deriving, but looks like that's not happening
rgrinberg has joined #ocaml
<Drup>
Bluddy: just do something like "module MyMap = struct include Map.Make(Foo) let pp pp_val = ... end"
<Drup>
and it will work
<Bluddy>
Drup: so just add the missing pieces for map? I guess that's doable
<Bluddy>
thanks
<Bluddy>
ie thanks to all 3 of you
nojb has quit [Quit: nojb]
<Drup>
well, mostly one: "pp"
<companion_cube>
I think ppx_deriving is great for user type definitions
<Drup>
(that was a joke, it would be a terrible terrible idea)
samuel_ has joined #ocaml
manud_ has quit [Quit: Be back later ...]
AlexRussia has joined #ocaml
<asmanur>
gasche: I see that as one more reason why twitter should die.
<asmanur>
When you can only talk with 140 characters, I guess bullying comes in quickly
BitPuffin has joined #ocaml
<samuel_>
is there any async equivalent of Lwt_process.open_process?
<samuel_>
I see it in Core_unix, but not anywhere in Async's modules
* companion_cube
thinks that gasche is right in that we should be less harsh when it comes to other people's projects or code
<Drup>
Or rather, explain *why* when we bash something. =)
Haudegen has quit [Ping timeout: 252 seconds]
Haudegen has joined #ocaml
Arsenik has joined #ocaml
chinglish has joined #ocaml
<gasche>
there are plenty of reasonable reasons why you would want to generate XML from OCaml code, generally of the form "tool X I have to work with understand XML input, and I want to feed it OCaml source code"
<gasche>
but I think it is good to be respectful of other people's work, even if we don't see its qualities, or see mostly the defects
<adrien>
there's gccxml too
<adrien>
well, never upstreamed but...
larhat1 has joined #ocaml
<gasche>
I also think some developer communities developped an affect-ladden way to speak of things that can be counter-productive
<gasche>
(eg. saying something is "horrible")
<companion_cube>
something can be horrible yet usable ;)
larhat has quit [Ping timeout: 245 seconds]
leowzukw has quit [Ping timeout: 250 seconds]
leowzukw has joined #ocaml
dario_ has joined #ocaml
dario_ has quit [Remote host closed the connection]
Arsenik has quit [Remote host closed the connection]
Simn has joined #ocaml
milosn has quit [Ping timeout: 240 seconds]
milosn has joined #ocaml
ygrek has quit [Ping timeout: 264 seconds]
nojb has joined #ocaml
milosn has quit [Ping timeout: 272 seconds]
milosn has joined #ocaml
jonludlam has joined #ocaml
samrat has quit [Quit: Computer has gone to sleep.]
kakadu has quit [Ping timeout: 258 seconds]
nojb has quit [Quit: nojb]
marynate has quit [*.net *.split]
robink has quit [*.net *.split]
Intensity has quit [*.net *.split]
IbnFirnas has quit [*.net *.split]
stux|away has quit [*.net *.split]
AlexRussia has quit [*.net *.split]
_andre has quit [*.net *.split]
diethyl has quit [*.net *.split]
johnf has quit [*.net *.split]
hbar_ has quit [*.net *.split]
jlouis has quit [*.net *.split]
jave_ has quit [*.net *.split]
thorsten1 has quit [*.net *.split]
girrig has quit [*.net *.split]
ivan\ has quit [*.net *.split]
luigy has quit [*.net *.split]
milosn has quit [*.net *.split]
tharugrim has quit [*.net *.split]
Snark_ has quit [*.net *.split]
mfp has quit [*.net *.split]
zapu has quit [*.net *.split]
hannes has quit [*.net *.split]
sh1ken has quit [*.net *.split]
englishm has quit [*.net *.split]
mk270 has quit [*.net *.split]
Plazma has quit [*.net *.split]
hsuh has quit [*.net *.split]
nickmeharry has quit [*.net *.split]
hnrgrgr has quit [*.net *.split]
alinab has quit [*.net *.split]
eikke has quit [*.net *.split]
larhat1 has quit [*.net *.split]
Haudegen has quit [*.net *.split]
xiaolin has quit [*.net *.split]
_2can has quit [*.net *.split]
_5kg has quit [*.net *.split]
sgnb has quit [*.net *.split]
ruoso_ has quit [*.net *.split]
acieroid has quit [*.net *.split]
testcocoon has quit [*.net *.split]
Simn has quit [*.net *.split]
ingsoc has quit [*.net *.split]
dav_ has quit [*.net *.split]
shinnya has quit [*.net *.split]
mal`` has quit [*.net *.split]
Leonidas has quit [*.net *.split]
sol__ has quit [*.net *.split]
strmpnk has quit [*.net *.split]
relrod has quit [*.net *.split]
NoNNaN has quit [*.net *.split]
nicoo has quit [*.net *.split]
thomasga has quit [*.net *.split]
Submarine has quit [*.net *.split]
pii4 has quit [*.net *.split]
keen___________9 has quit [*.net *.split]
psy_ has quit [*.net *.split]
ygu has quit [*.net *.split]
chinglish has quit [*.net *.split]
patronus has quit [*.net *.split]
transfinite has quit [*.net *.split]
libertas has quit [*.net *.split]
orbitz has quit [*.net *.split]
kerneis_ has quit [*.net *.split]
ousado has quit [*.net *.split]
pdewacht has quit [*.net *.split]
Nahra has quit [*.net *.split]
teiresias has quit [*.net *.split]
segmond has quit [*.net *.split]
wormphle1m has quit [*.net *.split]
jpdeplaix has quit [*.net *.split]
gasche has quit [*.net *.split]
bernardofpc has quit [*.net *.split]
vbmithr has quit [*.net *.split]
mrvn has quit [*.net *.split]
n0v has quit [*.net *.split]
jonludlam has quit [*.net *.split]
BitPuffin has quit [*.net *.split]
ebzzry has quit [*.net *.split]
dmiles_afk has quit [*.net *.split]
gdsfh1 has quit [*.net *.split]
jerith has quit [*.net *.split]
myst|work has quit [*.net *.split]
jbrown has quit [*.net *.split]
cthuluh has quit [*.net *.split]
badon has quit [*.net *.split]
myyst has quit [*.net *.split]
kalzz has quit [*.net *.split]
c74d has quit [*.net *.split]
msch has quit [*.net *.split]
averell has quit [*.net *.split]
voglerr1 has quit [*.net *.split]
majoh has quit [*.net *.split]
flux has quit [*.net *.split]
Ptival has quit [*.net *.split]
kapil__ has quit [*.net *.split]
fraggle_ has quit [*.net *.split]
abbe has quit [*.net *.split]
chris2 has quit [*.net *.split]
brendan has quit [*.net *.split]
hcarty has quit [*.net *.split]
kandu has quit [*.net *.split]
rom1504 has quit [*.net *.split]
emmanueloga has quit [*.net *.split]
ggherdov has quit [*.net *.split]
jcloud has quit [*.net *.split]
jeroud has quit [*.net *.split]
SHODAN has quit [*.net *.split]
srcerer has quit [*.net *.split]
mearnsh has quit [*.net *.split]
maurer has quit [*.net *.split]
pgas has quit [*.net *.split]
clog has quit [*.net *.split]
engil has quit [*.net *.split]
bobpoekert has quit [*.net *.split]
zozozo has quit [*.net *.split]
thegameg has quit [*.net *.split]
mehdi_ has quit [*.net *.split]
companion_cube has quit [*.net *.split]
rwmjones has quit [*.net *.split]
tg has quit [*.net *.split]
ddosia has quit [*.net *.split]
leifw has quit [*.net *.split]
n1ftyn8 has quit [*.net *.split]
cojy has quit [*.net *.split]
iZsh has quit [*.net *.split]
rks` has quit [*.net *.split]
def` has quit [*.net *.split]
whitequark has quit [*.net *.split]
lupine has quit [*.net *.split]
esden has quit [*.net *.split]
asmanur has quit [*.net *.split]
sirssi has quit [*.net *.split]
bbc has quit [*.net *.split]
Riviera_ has quit [*.net *.split]
gperetin has quit [*.net *.split]
Asmadeus has quit [*.net *.split]
leowzukw has quit [*.net *.split]
bugabinga has quit [*.net *.split]
PM` has quit [*.net *.split]
micrypt has quit [*.net *.split]
Unhammer has quit [*.net *.split]
ohama has quit [*.net *.split]
vincom2 has quit [*.net *.split]
johnelse has quit [*.net *.split]
so has quit [*.net *.split]
gustav___ has quit [*.net *.split]
reynir has quit [*.net *.split]
SuperNoeMan has quit [*.net *.split]
fold has quit [*.net *.split]
cross has quit [*.net *.split]
sigjuice has quit [*.net *.split]
bcuccioli has quit [*.net *.split]
ttm has quit [*.net *.split]
diginux has quit [*.net *.split]
gridaphobe has quit [*.net *.split]
bacam has quit [*.net *.split]
samuel_ has quit [*.net *.split]
struk|dtut has quit [*.net *.split]
pyon has quit [*.net *.split]
madroach has quit [*.net *.split]
Muzer has quit [*.net *.split]
Reventlov has quit [*.net *.split]
troydm has quit [*.net *.split]
Pepe_ has quit [*.net *.split]
q66[lap] has quit [*.net *.split]
wting has quit [*.net *.split]
deavid has quit [*.net *.split]
dinosaure2 has quit [*.net *.split]
tizoc has quit [*.net *.split]
ski has quit [*.net *.split]
sivoais has quit [*.net *.split]
Khady has quit [*.net *.split]
Darnuria has quit [*.net *.split]
emias has quit [*.net *.split]
fraggle-boate has quit [*.net *.split]
ia0 has quit [*.net *.split]
maufred has quit [*.net *.split]
vpm has quit [*.net *.split]
S11001001 has quit [*.net *.split]
xorpse has quit [*.net *.split]
inr_ has quit [*.net *.split]
burgobianco has quit [*.net *.split]
srax has quit [*.net *.split]
dwoos has quit [*.net *.split]
thizanne has quit [*.net *.split]
pollux has quit [*.net *.split]
smondet has quit [*.net *.split]
tobiasBora has quit [*.net *.split]
gargawel has quit [*.net *.split]
xaimus_ has quit [*.net *.split]
binarybitme has quit [*.net *.split]
Drup has quit [*.net *.split]
Rebelion has quit [*.net *.split]
cdidd has quit [*.net *.split]
araujo has quit [*.net *.split]
cartwright has quit [*.net *.split]
tokenrove has quit [*.net *.split]
tianon has quit [*.net *.split]
dbrumley has quit [*.net *.split]
Cypi has quit [*.net *.split]
osheeta has quit [*.net *.split]
Armael has quit [*.net *.split]
Antoine59 has quit [*.net *.split]
WanderingGlitch has quit [*.net *.split]
CissWit has quit [*.net *.split]
pippijn has quit [*.net *.split]
gustav___ has joined #ocaml
gridaphobe has joined #ocaml
ttm has joined #ocaml
fold has joined #ocaml
diginux has joined #ocaml
bacam has joined #ocaml
n0v has joined #ocaml
reynir has joined #ocaml
Drup has joined #ocaml
binarybitme has joined #ocaml
cross has joined #ocaml
stux has joined #ocaml
bcuccioli has joined #ocaml
SuperNoeMan has joined #ocaml
xaimus_ has joined #ocaml
gargawel has joined #ocaml
tobiasBora has joined #ocaml
so has joined #ocaml
mrvn has joined #ocaml
Asmadeus has joined #ocaml
smondet has joined #ocaml
gperetin has joined #ocaml
pollux has joined #ocaml
sirssi has joined #ocaml
vbmithr has joined #ocaml
johnelse has joined #ocaml
bernardofpc has joined #ocaml
thizanne has joined #ocaml
asmanur has joined #ocaml
burgobianco has joined #ocaml
dwoos has joined #ocaml
cthuluh has joined #ocaml
wormphle1m has joined #ocaml
sigjuice has joined #ocaml
esden has joined #ocaml
xorpse has joined #ocaml
gasche has joined #ocaml
srax has joined #ocaml
inr_ has joined #ocaml
whitequark has joined #ocaml
S11001001 has joined #ocaml
segmond has joined #ocaml
def` has joined #ocaml
rks` has joined #ocaml
vpm has joined #ocaml
iZsh has joined #ocaml
lupine has joined #ocaml
cojy has joined #ocaml
n1ftyn8 has joined #ocaml
teiresias has joined #ocaml
leifw has joined #ocaml
vincom2 has joined #ocaml
maufred has joined #ocaml
ddosia has joined #ocaml
ia0 has joined #ocaml
fraggle-boate has joined #ocaml
emias has joined #ocaml
Nahra has joined #ocaml
Darnuria has joined #ocaml
Khady has joined #ocaml
sivoais has joined #ocaml
tg has joined #ocaml
pdewacht has joined #ocaml
rwmjones has joined #ocaml
ousado has joined #ocaml
jbrown has joined #ocaml
CissWit has joined #ocaml
tianon has joined #ocaml
dbrumley has joined #ocaml
Cypi has joined #ocaml
osheeta has joined #ocaml
Armael has joined #ocaml
Antoine59 has joined #ocaml
WanderingGlitch has joined #ocaml
pippijn has joined #ocaml
companion_cube has joined #ocaml
mehdi_ has joined #ocaml
thegameg has joined #ocaml
zozozo has joined #ocaml
bobpoekert has joined #ocaml
engil has joined #ocaml
ski has joined #ocaml
clog has joined #ocaml
tizoc has joined #ocaml
kerneis_ has joined #ocaml
maurer has joined #ocaml
mearnsh has joined #ocaml
jpdeplaix has joined #ocaml
ohama has joined #ocaml
orbitz has joined #ocaml
Riviera_ has joined #ocaml
myst|work has joined #ocaml
srcerer has joined #ocaml
pgas has joined #ocaml
ygu has joined #ocaml
dinosaure2 has joined #ocaml
SHODAN has joined #ocaml
jeroud has joined #ocaml
Unhammer has joined #ocaml
jerith has joined #ocaml
libertas has joined #ocaml
ggherdov has joined #ocaml
jcloud has joined #ocaml
deavid has joined #ocaml
flux has joined #ocaml
micrypt has joined #ocaml
emmanueloga has joined #ocaml
majoh has joined #ocaml
hcarty has joined #ocaml
tokenrove has joined #ocaml
transfinite has joined #ocaml
patronus has joined #ocaml
rom1504 has joined #ocaml
brendan has joined #ocaml
voglerr1 has joined #ocaml
kandu has joined #ocaml
chris2 has joined #ocaml
wting has joined #ocaml
averell has joined #ocaml
msch has joined #ocaml
Leonidas has joined #ocaml
sol__ has joined #ocaml
strmpnk has joined #ocaml
cartwright has joined #ocaml
kalzz has joined #ocaml
dmiles_afk has joined #ocaml
c74d has joined #ocaml
keen___________9 has joined #ocaml
relrod has joined #ocaml
psy_ has joined #ocaml
Pepe_ has joined #ocaml
abbe has joined #ocaml
mal`` has joined #ocaml
badon has joined #ocaml
struk|dtut has joined #ocaml
araujo has joined #ocaml
bugabinga has joined #ocaml
myyst has joined #ocaml
cdidd has joined #ocaml
troydm has joined #ocaml
bbc has joined #ocaml
q66[lap] has joined #ocaml
gdsfh1 has joined #ocaml
pii4 has joined #ocaml
PM` has joined #ocaml
nicoo has joined #ocaml
testcocoon has joined #ocaml
shinnya has joined #ocaml
fraggle_ has joined #ocaml
BitPuffin has joined #ocaml
kapil__ has joined #ocaml
madroach has joined #ocaml
Ptival has joined #ocaml
thomasga has joined #ocaml
ebzzry has joined #ocaml
pyon has joined #ocaml
jonludlam has joined #ocaml
Rebelion has joined #ocaml
NoNNaN has joined #ocaml
dav_ has joined #ocaml
Simn has joined #ocaml
robink has joined #ocaml
ingsoc has joined #ocaml
samuel_ has joined #ocaml
Muzer has joined #ocaml
marynate has joined #ocaml
leowzukw has joined #ocaml
chinglish has joined #ocaml
Reventlov has joined #ocaml
Submarine has joined #ocaml
Intensity has joined #ocaml
IbnFirnas has joined #ocaml
diethyl has joined #ocaml
jlouis has joined #ocaml
luigy has joined #ocaml
kakadu has joined #ocaml
_andre has joined #ocaml
AlexRussia has joined #ocaml
johnf has joined #ocaml
thorsten1 has joined #ocaml
alinab has joined #ocaml
srcerer has quit [Ping timeout: 272 seconds]
ivan\_ has joined #ocaml
larhat1 has joined #ocaml
Haudegen has joined #ocaml
xiaolin has joined #ocaml
_5kg has joined #ocaml
ruoso_ has joined #ocaml
acieroid has joined #ocaml
_2can has joined #ocaml
sgnb has joined #ocaml
_5kg has quit [Max SendQ exceeded]
_5kg has joined #ocaml
nojb has joined #ocaml
nojb has quit [Client Quit]
ygrek has joined #ocaml
samuel_ has quit [Ping timeout: 246 seconds]
thomasga has quit [Read error: Connection reset by peer]
thomasga has joined #ocaml
joncfoo has joined #ocaml
hugomg has joined #ocaml
leowzukw has quit [Quit: leaving]
NoNNaN has quit [Remote host closed the connection]
NoNNaN has joined #ocaml
dario_ has joined #ocaml
q66[lap] has quit [Changing host]
q66[lap] has joined #ocaml
Bluddy has joined #ocaml
Anarchos has joined #ocaml
AlexRussia has quit [Ping timeout: 240 seconds]
Submarine has quit [Quit: Leaving]
psy_ has quit [Ping timeout: 245 seconds]
psy_ has joined #ocaml
thomasga has quit [Quit: Leaving.]
travisbrady has joined #ocaml
Thooms has joined #ocaml
ggole has joined #ocaml
rand000 has joined #ocaml
samrat has joined #ocaml
joncfoo has quit [Ping timeout: 256 seconds]
<Leonidas>
gccxml still works?
<adrien>
I don't think it has been maintained in a long time
bytbox has joined #ocaml
t4nk636 has joined #ocaml
Thooms has quit [Quit: WeeChat 1.0.1]
lordkryss has quit [Quit: Connection closed for inactivity]
dario_ has quit [Remote host closed the connection]
<Leonidas>
I just implemented a dip-like combinator to replace ; and then figured out that this is exactly what ; does anyway.
axiles has joined #ocaml
pgas has quit [Remote host closed the connection]
ontologiae has quit [Ping timeout: 258 seconds]
jonludlam has quit [Ping timeout: 264 seconds]
ebzzry has quit [Remote host closed the connection]
pminten has joined #ocaml
myyst has quit [Ping timeout: 265 seconds]
myyst has joined #ocaml
t4nk216 has joined #ocaml
t4nk636 has quit [Ping timeout: 246 seconds]
larhat1 has quit [Quit: Leaving.]
jonludlam has joined #ocaml
enitiz has joined #ocaml
tharugrim has joined #ocaml
Rebelion has quit [Quit: Saliendo]
hilquias has joined #ocaml
darkf has quit [Quit: Leaving]
travisbrady has quit [Quit: travisbrady]
kapil__ has quit [Quit: Connection closed for inactivity]
milosn has joined #ocaml
jabroney1 has joined #ocaml
enitiz has quit [Quit: Leaving]
enitiz has joined #ocaml
maufred has quit [Remote host closed the connection]
travisbrady has joined #ocaml
Bluddy has quit [Quit: Connection closed for inactivity]
shinnya has quit [Ping timeout: 244 seconds]
shinnya has joined #ocaml
t4nk216 has quit [Ping timeout: 246 seconds]
lordkryss has joined #ocaml
badkins has joined #ocaml
<nicoo>
adrien: Then, you can write a compiler in XSLT, right?
<struktured>
whitequark: should an empty list serialize as nothing (literally "") within the Encoder's byte buffer? I noticed even the empty string encodes something (it appears to be "\n\000").
<nicoo>
adrien: HELL NO :o
<adrien>
='(
xavierm02 has joined #ocaml
xavierm02 has quit [Quit: Page closed]
davine has joined #ocaml
<whitequark>
struktured: yep
<whitequark>
talking about protobuf, right?
davine has left #ocaml [#ocaml]
<struktured>
whitequark: yeah. riak is not a fan of empty keys apparently
<whitequark>
if you want it to serialize to nothing, specify [@default []]
<struktured>
whitequark: for sake of riak, guess I need to decorate my lists with some marker value to indicate they're empty. bleh...
ontologiae has joined #ocaml
bytbox has quit [Remote host closed the connection]
<struktured>
whitequark: damnnit. tried wrapping the list in an optional but None gets serialized as nothing too. any suggestion on how to ensure the buffer is always non-empty for collection types?
<whitequark>
ohhhh, wait, you mean empty list IS serialized to ""
<whitequark>
gotcha
<struktured>
yeah
<whitequark>
I don't remember actually. try reading the documentation
<struktured>
I suppose I could decorate all riak key entries on the way in..that would work
<whitequark>
that's one way yeah
<whitequark>
try smth like type 'a t = ('a) [@@deriving protobuf]
<whitequark>
I don't remember if this will trick it to wrap it in an empty tuple
<whitequark>
I mean, 1-tuple
<whitequark>
or just make a record otherwise
<struktured>
ok I'll play around with these approaches. thanks
Haudegen has quit [Ping timeout: 252 seconds]
struktured has quit [Ping timeout: 272 seconds]
Haudegen has joined #ocaml
Arsenik has joined #ocaml
MrScout has joined #ocaml
chinglish has quit [Quit: Nettalk6 - www.ntalk.de]
NoNNaN has quit [Remote host closed the connection]
NoNNaN has joined #ocaml
Submarine has joined #ocaml
MrScout has quit [Remote host closed the connection]
MrScout has joined #ocaml
strobel has joined #ocaml
strobel has quit [Client Quit]
ebzzry has quit [Remote host closed the connection]
rgrinberg has joined #ocaml
jabroney1 has joined #ocaml
<whitequark>
yeah much better
_andre has quit [Quit: leaving]
larhat has joined #ocaml
pgas has joined #ocaml
uris77 has joined #ocaml
eyyub has joined #ocaml
rgrinberg has quit [Quit: Leaving.]
ineol has joined #ocaml
fraggle-boate has quit [Ping timeout: 250 seconds]
struktured has joined #ocaml
jonludlam has quit [Quit: Coyote finally caught me]
ineol has quit [Quit: ineol]
<smondet>
struktured: maybe not the solution you want: but if you wrap your types in a "versionned protocol", well, on top of all advantages of versioning, your riak blobs will have at least the version tag :)
AlexRussia has joined #ocaml
<whitequark>
^
<struktured>
smondet: versioning is a great idea actually. do you picture the versioning purely internal to the riak implementation or exposed as part of api too?
<artagnon>
I've written the equivalent in the C API and OCaml API, and they obviously work.
<artagnon>
whitequark: ^
<whitequark>
I dunno, I never used the C++ API
<whitequark>
ask on #llvm
<artagnon>
Nobody ever answers there :|
<whitequark>
then you'll have to figure it out yourself.
<artagnon>
Damn it.
<struktured>
artagnon: do you have a compiler error or runtime error?
<smondet>
struktured: the way I do it (which is still kinda new to me also) is on the ocaml side (using ATD actually): type t = [`V0 of V0.t | `V1 of V1.t] and the deserialization function returns V1.t using a function V1.of_v0
<artagnon>
struktured: Runtime.
<artagnon>
The assert fails.
<struktured>
artagnon: sheesh. yeah have fun :(
<struktured>
artagnon: best guess is create returns null because of some missing libs at runtime
<artagnon>
What libs? I linked in everything correctly.
<whitequark>
did you link in MCJIT?
<artagnon>
Whatever I liked in in the case of the C API.
<artagnon>
Oh, I probably didn't initialize the native backend.
<whitequark>
really, what you have to do in these cases is track the wrong piece of data backwards through LLVM sources and figure out where it originates.
<artagnon>
Hm, thanks. I'll look into it.
<whitequark>
I'm not going to do it for you every time.
<artagnon>
Ofcourse, I'm just learning.
<artagnon>
Can you outline how you trace it through the sources?
<artagnon>
Without a debugger ie.
<artagnon>
Because the debugger isn't working for me.
<whitequark>
?
<artagnon>
Wait, I'll show you.
AlexRussia has quit [Ping timeout: 244 seconds]
<struktured>
smondet: I've not once personally used ATDs so this is a bit over my head. give me a bit to absorb
<smondet>
ATD is just a way to describe types, if you're on the PPX wagon, you don't *need* it