[Haskell-cafe] [ANN] isbn - ISBN Validation and Manipulation

Carter Schonwald carter.schonwald at gmail.com
Thu Jul 30 14:04:04 UTC 2020

cool! Thanks for sharing!
(i mean, who doesn't like to read a good book!)

Question: would it be worth considering  internally having the digits be
stored as half bytes for space usage? eg ISBN10 -> use ~ 5 bytes, and
ISBN13 be ~ 7 bytes  (this could be within a word64 as a tiny 8 slot array,
OR  or any sort of vector/array datatype)? (or instead of a decimal binary
rep, pack it into a word64 as the number itself for either?) Granted this
would complicate some of the internals engineering a teeny bit

it looks like, in the current code, if there's  no hyphens, it'll keep the
input text value as the internal rep, *which can cause space leaks* if it's
a slice of a much larger text input you otherwise do not intend to retain.
When it generates its own text string, well...  the text package uses utf16
(aka 2 bytes per character for valid ascii) as the internal rep, so the
buffer representation  will occupy 10 * 2 bytes  or 13* 2bytes, so 20-26
bytes within the buffer, ignoring the extra word or two of indexing/offsets!

point being ... it seems like could embed them (with a teeny bit of work)
as follows

data ISBN =
     IsIBSN10 ISBN10
     | isISBN13 ISBN13

newtype ISBN10 = ISBN10 Word64
newtype ISBN13 = ISBN13 Word64

and then i'd probably be inclined to do use Data.Bits and do the "word 64
as a 16 slot array of  word4's," which would also support the base 11 digit
at the end encoding constraint, since word4 == base 16 :)
then a teeny bit of work to do the right "right" ords and shows etc on this
rep etc

i hope the design i'm pointing out makes sense for you (and if i'm not
being clear, please holler and i'll try to help)

and again, thanks for sharing this!

On Wed, Jul 29, 2020 at 1:39 PM Christian Charukiewicz via Haskell-Cafe <
haskell-cafe at haskell.org> wrote:

> Hello Haskell Cafe,
> I wanted to share my first ever Haskell package: isbn
> https://hackage.haskell.org/package/isbn
> The package is motivated by my need to validate ISBNs (the unique
> identifier associated with every book published since 1970) in a Haskell
> application I am building. I published isbn as a back in May but yesterday
> I made some improvements the API and I think it is now ready to share as
> v1.1.0.0.
> I have been using Haskell commercially for a few years, and have made
> several contributions to various packages, but as mentioned, this is my
> first time authoring and publishing a package. If anyone has any feedback,
> I would be happy to hear it.
> Thank you,
> Christian Charukiewicz
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20200730/ff422ec6/attachment.html>

More information about the Haskell-Cafe mailing list