Sha256: 667b840db4817fe3ae5b5b4d9ab59793168c6ba043805e9c969fce647b6318d3

Contents?: true

Size: 475 Bytes

Versions: 229

Compression:

Stored size: 475 Bytes

Contents

module Luhn (isValid) where

import Data.Char (digitToInt)

luhnDouble :: Integral a => a -> a
luhnDouble n | n < 5     = n * 2
             | otherwise = n * 2 - 9

luhnDigits :: Integral a => [a] -> [a]
luhnDigits = zipWith ($) (cycle [id, luhnDouble]) . reverse

checksum :: Integral a => [a] -> a
checksum = (`rem` 10) . sum . luhnDigits

isValid :: String -> Bool
isValid s = length digits > 1 && checksum digits == 0
  where digits = map digitToInt $ filter (/= ' ') s

Version data entries

229 entries across 229 versions & 1 rubygems

Version Path
trackler-2.1.0.20 tracks/haskell/exercises/luhn/examples/success-standard/src/Luhn.hs
trackler-2.1.0.19 tracks/haskell/exercises/luhn/examples/success-standard/src/Luhn.hs
trackler-2.1.0.18 tracks/haskell/exercises/luhn/examples/success-standard/src/Luhn.hs
trackler-2.1.0.17 tracks/haskell/exercises/luhn/examples/success-standard/src/Luhn.hs
trackler-2.1.0.16 tracks/haskell/exercises/luhn/examples/success-standard/src/Luhn.hs
trackler-2.1.0.15 tracks/haskell/exercises/luhn/examples/success-standard/src/Luhn.hs
trackler-2.1.0.14 tracks/haskell/exercises/luhn/examples/success-standard/src/Luhn.hs
trackler-2.1.0.13 tracks/haskell/exercises/luhn/examples/success-standard/src/Luhn.hs
trackler-2.1.0.12 tracks/haskell/exercises/luhn/examples/success-standard/src/Luhn.hs