module Data.Char.Extended
    ( module Data.Char
    , chrSafe
    ) where

import Data.Char
import Data.Ix   (inRange)

-- | Invalid Unicode codepoints and NUL will be written as the "unknown codepoint"
--   character (0xFFFD)
chrSafe :: Int -> Char
chrSafe codepoint
    | inRange (0x1,0x10FFFF) codepoint = chr codepoint
    | otherwise = '\xFFFD'