vic

vic

Asdf Core Team

Hello,

I’ve just pushed Spec, the first beta version of an clojure.spec inspired library for conforming data against an specification.

Currenly Spec supports conforming against most Elixir data types, supports regex operators, and some other niceties you can read of in the README file (a bit long read). But there still work to do on it, like supporting data example generators, and maybe other things.

<3, vic.

Showing Posts 1 to 7

OvermindDL1

OvermindDL1

/me is glad he grabbed it before github went down…

This looks quite nice, could clean up my type testing that I have scattered around. I am curious though, why does something like:

conform!(is_tuple() and &(tuple_size(&1) == 2), {1})

Take the value as the second argument instead of the first? It would be convenient to do things like:

value
|> conform!(is_tuple() and &(tuple_size(&1) == 2))
|> etc...

Also, on this example from your README.md:

iex> conform!(hello :: is_binary(), "world")
{:hello, "world"}

Have you thought about mandating this syntax instead:

iex> conform!(:hello :: is_binary(), "world")
{:hello, "world"}

That way we could tag it with anything, even a variable like:

iex> blah = :vwoop
iex> conform!(blah :: is_binary(), "world")
{:vwoop, "world"}
vic

vic OP

Asdf Core Team

Hey @OvermindDL1, Thanks a lot for your feedback.

Well, while conform/2 expects the predicates (or any defined spec) inside of it to take the value as first argument (values are just piped into predicates), conform/2 itself expects its as second, I guess just because in Elixir functions use the first argument for the subject value, eg Regex.match(regex, string), so I guess I just went for Spec.conform(spec, value) naturally.

But if you do defspec and give it a name, then the resulting function will expect to work on the first value, applying the spec to it.

defp sum_tuple({a, b}, c) when a + b == c, do: true
defp sum_tuple({a, b}, c), do: false

defspec two_tuple(is_tuple() and &(tuple_size(&1) == 2))

value = {1, 2}

value
|> two_tuple()
|> sum_tuple(3)

So I guess having Spec.conform/2 take the spec as first argument (again just like many other things on Elixir) is better.

Regarding tags, you are irght, it could be useful to tag with a bound variable. Will change it and see how it feels.

Thanks for reading and giving input! :slight_smile:

OvermindDL1

OvermindDL1

It looks quite useful indeed, I like it. :slight_smile:

Qqwy

Qqwy

TypeCheck Core Team

I will definitely use this when writing more elaborate behaviours/interfaces. It looks like a really clean way to structure conformity checks. :smile: Thank you for making this, @vic!

vic

vic OP

Asdf Core Team

Hello !

Today I made some progress on the README guide, it’d would be wonderful if any of you could give a quick look at it and provide some feedback, thanks in advance! :slight_smile:

Crowdhailer

Crowdhailer

Creator of Raxx

Looks nice. Not sure when but I look forward to having a play with it. Thanks for sharing

marciol

marciol

Awesome, I was waiting something like that since a presentation of clojure.spec in a clojure meetup. Nice to see your work. I pretend to use in my projects soon.

— All posts loaded —

Where Next? Top

Trending in Announcing Top

restlessronin
The repo is at GitHub - cyberchitta/openai_ex: Community maintained Elixir library for OpenAI API · GitHub. Docs are at OpenaiEx User Gu...
152 12366 136
New
type1fool
WebAuthnLiveComponent WebAuthnComponents See this post about renaming the package. Passwordless authentication for Phoenix LiveView app...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New
kip
In 2021 I started a new library called Tempo with the objective of modelling time as a set of intervals - not as instants. In 2022 I gave...
New
gtcode
Aloha gang, There’s a new class of AI model out from TypeSafe. Jev is their flagship model. You can learn about it here: ...
New

Other Trending Topics Top

budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New
OndrejValenta
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly) AI dream has many faces, but general...
New
Null-logic-0
What IDE or editor are you using for Elixir development? Personally, I use Zed, and I really like it, but sometimes I wish there were a ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews