isbn: ISBN Validation and Manipulation

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

See the README at https://github.com/charukiewicz/hs-isbn#readme


[Skip to Readme]

Properties

Versions 1.0.0.0, 1.1.0.0, 1.1.0.1, 1.1.0.2, 1.1.0.2, 1.1.0.3, 1.1.0.4, 1.1.0.5
Change log CHANGELOG.md
Dependencies base (>=4.9 && <5.0), text (>=1.2 && <1.3) [details]
License Apache-2.0
Copyright © 2020 Christian Charukiewicz
Author Christian Charukiewicz
Maintainer charukiewicz@protonmail.com
Category Data
Home page https://github.com/charukiewicz/hs-isbn
Bug tracker https://github.com/charukiewicz/hs-isbn/issues
Source repo head: git clone https://github.com/charukiewicz/hs-isbn.git
Uploaded by charukiewicz at 2020-11-14T01:51:45Z

Modules

[Index] [Quick Jump]

Flags

Manual Flags

NameDescriptionDefault
dev

Turn on development settings, where all warnings are errors

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for isbn-1.1.0.2

[back to package description]

isbn: ISBN Validation and Manipulation

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 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

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 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 <path-to-repo>
$ 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