That’s something LiquidHaskell does ( http://goto.ucsd.edu/~rjhala/liquid/haskell/blog/about/). It’s way out of scope for Elm’s type checker.
2016-10-02 16:40 GMT+02:00 Marco Perone <[email protected]>: > Some days ago I had an idea, which I don't know if it's worth exploring, > so I'll just share it here and ask for some feedback. > > Thinking about how to handle only valid state of an application, I tought > it would be nice if, for every function, we could be able to specify > precisely its domain, instead of dealing with unacceptable input values > with special return values (i.e. what we usually do with Option). > > Think for example about the `logBase` function in the `Core.Basics` > package. Its type annotation is `logBase: Float -> Float -> Float`, where > the first Float is the base of the logarithm and the second is the > argument. Actually, a logarithm is defined only for a base positive and not > equal to one and for a positive argument. > > At the moment the presence of invalid input values is handled returning > `Infinity` or `NaN` when the logarithm is actually not defined. > > Wouldn't it be nicer if we could define the same function as something like > > logBase: (Float | > 0 && != 1) -> (Float | > 0) -> Float > > in a way that the compiler itself could check that we are invoking the > function only with correct values to avoid NaN return values? > > As I said, I don't know if this is a good idea, and I don't know how much > of a burder this would be to the compiler... > > -- > You received this message because you are subscribed to the Google Groups > "Elm Discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Elm Discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
