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.

Reply via email to