简体   繁体   中英

“No operation” haskell

If I remember correctly from school, there's a function or keyword that is used for "not yet implemented" but the code compiles. I've tried to search for it, but can't find. Any one know what I'm looking for?

is's something like

isDivisor :: Integer -> Integer -> Bool
isDivisor x y = None
--isDivisor x y = (rem x y) == 0

What you're thinking of is called bottom

bottom isn't just for showing something isn't implemented, it's meant to represent a computation which causes our program to fail.

For example we can actually define undefined ourselves as an infinite loop

undefined = let x = x in x
undefined = undefined

So really what we're doing is just putting in a value undefined :: a which will cause or program to crash or loop forever, but never evaluating it.

Therefore if you have some big and complex function that you don't know how to implement you could just do this

foo :: Bar -> Baz -> Quux
foo bar baz = foo bar baz

Since this typechecks, it'll compile and we can test other parts of our program.

However since it's pretty unhelpful to have an infinite loop when you accidentally run that part of the program, GHC and others implement undefined as a differently. They have them crash the program and emit an error message, eg:

-- In GHC
error msg = throw (ErrorCall s)
undefined = error "Prelude.undefined"

So to leave a function undefined with better debugging capabilities

foo bar baz = undefined
foo bar baz = error ("Tried to evaluate foo with" ++ show bar ++ show baz)

If you're finding the concept of bottom confusing, hammar posted a great answer

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM