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

bluzky
You may know https://ui.shadcn.com/, a UI component library for React. I really love it’s design style and components. I’ve built some co...
387 15136 120
New
wojtekmach
Hey everyone! Req is an HTTP client for Elixir that I’ve been working on for quite some time. There is already a lot of HTTP clients out...
New
handnot2
Samly can be used to enable SAML 2.0 Single Sign On in a Plug/Phoenix application. This library uses Erlang esaml to provide plug enabl...
New
woylie
Flop is an Elixir library that applies filtering, ordering and pagination parameters to your Ecto queries. offset-based pagination with...
New
restlessronin
The repo is at GitHub - cyberchitta/openai_ex: Community maintained Elixir library for OpenAI API · GitHub. Docs are at OpenaiEx User Gu...
152 11030 135
New
shahryarjb
The Chelekom project is a library of Phoenix and LiveView components generated via Mix tasks to fit developer needs seamlessly. One of i...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New

Other Trending Topics Top

mudasobwa
I am seeing a lot of aplications of Argumentum ad Vericundiam in software discussions. They do link some piece of writing and point us to...
New
bartblast
Hey folks, I just published a post about Hologram’s funding and where the project goes next - the short version: Curiosum as Main Spons...
New
alexslade
Fly’s CEO posted this recently - Turn And Face The Strange · The Fly Blog It says that Fly is going all-in on sprites, which is a worry ...
New
Herve37
We’re evaluating API mocking tools for OpenAPI-based projects and would love to hear what other teams are using. We’re particularly inte...
New
sorenone
Today we’re releasing Oban for Python. Not an Oban client in Python. Not a pythonx wrapper embedded in Elixir. Nope, it’s a fully operati...
New
lawik
I was thinking since Goatmire Elixir turned out pretty good I should maybe do another one. 30th of Sep - 2nd of Oct this year./ The firs...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews