isbn: ISBN Validation and Manipulation ====================================== [![Build Status](https://github.com/charukiewicz/hs-isbn/workflows/CI/badge.svg)](https://github.com/charukiewicz/hs-isbn/actions?query=workflow%3ACI) [![Hackage](http://img.shields.io/hackage/v/isbn.svg)](https://hackage.haskell.org/package/isbn) [![Hackage CI](https://matrix.hackage.haskell.org/api/v2/packages/isbn/badge)](https://matrix.hackage.haskell.org/package/isbn) [![Stackage LTS](http://stackage.org/package/isbn/badge/lts)](http://stackage.org/lts/package/isbn) [![Stackage Nightly](http://stackage.org/package/isbn/badge/nightly)](http://stackage.org/nightly/package/isbn) [![Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue)](https://www.apache.org/licenses/LICENSE-2.0.html) All books published by major publishers since 1970 have an International Standard Book Number (ISBN) associated with them. Prior to 2007, all ISBNs issued were ten digit ISBN-10 format. Since 2007, new ISBNs have been issued in the thirteen digit ISBN-13 format. See the [ISBN Wikipedia article](https://en.wikipedia.org/wiki/International_Standard_Book_Number) for more information. ## Overview This library provides data types and functions both validating and working with ISBNs. For general use, only importing the `Data.ISBN` module is required, as it reexports all functionality for validating and converting between ISBN-10 and ISBN-13 values. The specific implementations for validation are located in the `Data.ISBN.ISBN10` and `Data.ISBN.ISBN13` modules, respectively. ## Usage Example: Validating an ISBN and printing the error ```haskell import Data.ISBN (ISBN, validateISBN, renderISBNValidationError) validateUserSuppliedISBN :: Text -> Either Text ISBN validateUserSuppliedISBN userIsbnInput = either (Left . renderISBNValidationError) Right (validateISBN userIsbnInput) someValidISBN10 = validateUserSuppliedISBN "0345816021" -- Right (ISBN10 "0345816021") someValidISBN13 = validateUserSuppliedISBN "9780807014295" -- Right (ISBN13 "9780807014295") tooShortISBN = validateUserSuppliedISBN "0-345-816" -- Left "An ISBN must be 10 or 13 characters, not counting hyphens" invalidISBN10 = validateUserSuppliedISBN "0-345-81602-3" -- Left "The supplied ISBN-10 is not valid" ``` ## Development This library is developed using a [Nix](https://nixos.org/nix/) shell. The environment is specified in `shell.nix`. You can enter the environment with `nix` installed via `nix-shell`. The `nix-shell` will install sandboxed copies of `cabal-install`, `ghcid`, `entr`, and `gnumake`, which are the utilities necessary to build the project, run the tests, and create a local copy of the documentation. #### Entering the development environment and runnning tests ``` $ cd $ nix-shell # assumes `nix` is installed (nix-shell) $ make help # show all of the make targets (nix-shell) $ make tests-watch # build the library and run the tests in `ghcid` (nix-shell) $ make docs # build a local copy of the haddock documentation ```