Custom Errors in PureScript
Our first example demonstrates how to create custom errors in PureScript. We’ll create a custom error type and implement the Error class for it.
module Main where
import Prelude
import Data.Either (Either(..))
import Effect (Effect)
import Effect.Console (log)
-- A custom error type usually has the suffix "Error".
newtype ArgError = ArgError
{ arg :: Int
, message :: String
}
-- Implementing the Error class for our custom error type
instance showArgError :: Show ArgError where
show (ArgError e) = show e.arg <> " - " <> e.message
instance errorArgError :: Error ArgError where
message (ArgError e) = e.message
-- Our function that might return an error
f :: Int -> Either ArgError Int
f arg =
if arg == 42
then Left $ ArgError { arg, message: "can't work with it" }
else Right $ arg + 3
main :: Effect Unit
main = do
case f 42 of
Left err -> do
log $ "Error: " <> show err
Right result ->
log $ "Result: " <> show resultIn this example, we define a custom error type ArgError that contains an integer argument and an error message. We implement the Show and Error typeclasses for ArgError, which is similar to implementing the Error() method in Go.
The f function demonstrates how to return our custom error. If the input is 42, it returns a Left value containing our custom error. Otherwise, it returns a Right value with the result.
In the main function, we call f with the argument 42 and pattern match on the result. If it’s a Left (indicating an error), we print the error. Otherwise, we print the result.
To run this program, save it as Main.purs and use the PureScript compiler and runtime:
$ spago run
Error: 42 - can't work with itThis example shows how to create and use custom error types in PureScript, which provides a type-safe way to handle specific error conditions in your code.