types - Haskell: No instance arising -


beginning haskell, encounter problems types (and less helpful error messages of ghc). defined following function:

ghci> let f x = floor x == x ghci> :t f f :: (integral a, realfrac a) => -> bool 

which succeeds, invocation seams difficult:

ghci> let = 1.1 ghci> f  <interactive>:296:1:     no instance (integral double) arising use of `f'     possible fix: add instance declaration (integral double)     in expression: f     in equation `it': = f ghci> let b = 2 ghci> f b  <interactive>:298:1:     no instance (realfrac integer) arising use of `f'     possible fix: add instance declaration (realfrac integer)     in expression: f b     in equation `it': = f b 

how define function correctly?

haskell doesn't any automatic coercion between different numeric types if e.g. compare x == y x , y have have exact same type (e.g. both ints or both floats).

now, if @ type of floor it's

floor :: (integral b, realfrac a) => -> b 

which means can call fractional types , result type must integral type.

when call f 1.1 inside f end making comparison

floor 1.1 == 1.1 

but have problem because floor can return integral types , in order make comparison result has have same type 1.1 not integral.

you need define f as

let f x = fromintegral (floor x) == x 

the fromintegral call coerces integral floor value fractional value can compared original x.


Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -