Code Monkey home page Code Monkey logo

Comments (4)

adamgfraser avatar adamgfraser commented on August 20, 2024 1

I like it.

from zio-prelude.

adamgfraser avatar adamgfraser commented on August 20, 2024

I'm a little worried about this. While being able to aggregate with double or float values is certainly useful they don't satisfy the laws and defining instances for them is going to result in derived instances involves them that also aren't lawful in ways that may be less obvious. I agree it would be nice to do something here and I'm not sure what the solution is but this seems like it could be another area where we could potentially do something different than other libraries have done here.

Another related thing that is I think less controversial is instances that are lawful but aren't testable. For example, function composition is closed for functions A => A, but we can't test it because it is not possible to define equality for functions. Perhaps we could use some notion of "equality to the extent of testability" here. For example, two functions are equal as far as we can tell if they return identical outputs for a random sample of inputs.

from zio-prelude.

mijicd avatar mijicd commented on August 20, 2024

I think we need some form of "special" treatment here. For lawless instances perhaps pull them out into separate package? 😕

from zio-prelude.

jdegoes avatar jdegoes commented on August 20, 2024

If you look at Scalaz and Cats, both excluded the instances, and pushed them into another package (outlaws / alleycats). This made it (a) still possible to access for the determined user, albeit as orphan instances, and (b) more painful for common case when violations of laws affect correctness only in "small" ways (e.g. associativity of float / double addition / multiplication—which affects accuracy of the result, but so do all calculations involving floats / doubles).

My feeling is that this design choice (to force illegal instances to be orphans in a third-party library) is thoroughly explored in other FP libraries. There is a lot of convenience in being able to, e.g. call foldMap on a foldable of doubles, and get back a sum, even if the answer is different depending on whether the implementation folds from the left or from the right (and it shouldn't be, according to laws).

Will this break some generic code in mild ways? Yes, but only for people using floats / doubles generically. And if you're doing that, there's probably a reason (e.g. performance, since these types are way faster than rational types), and you are probably willing to pay the consequences.

from zio-prelude.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.