module Data.Text.Punycode.Shared where import Data.Char (ord) base :: Int base :: Int base = 36 tmin :: Int tmin :: Int tmin = 1 tmax :: Int tmax :: Int tmax = 26 skew :: Int skew :: Int skew = 38 damp :: Int damp :: Int damp = 700 initial_bias :: Int initial_bias :: Int initial_bias = 72 initial_n :: Int initial_n :: Int initial_n = 128 adapt :: Int -> Int -> Bool -> Int adapt :: Int -> Int -> Bool -> Int adapt delta :: Int delta numpoints :: Int numpoints firsttime :: Bool firsttime = Int helper where helper :: Int helper = Int -> Int -> Int loop 0 (Int -> Int) -> Int -> Int forall a b. (a -> b) -> a -> b $ Int delta' Int -> Int -> Int forall a. Num a => a -> a -> a + (Int delta' Int -> Int -> Int forall a. Integral a => a -> a -> a `div` Int numpoints) where delta' :: Int delta' | Bool firsttime = Int delta Int -> Int -> Int forall a. Integral a => a -> a -> a `div` Int damp | Bool otherwise = Int delta Int -> Int -> Int forall a. Integral a => a -> a -> a `div` 2 loop :: Int -> Int -> Int loop k :: Int k delta' :: Int delta' | Int delta' Int -> Int -> Bool forall a. Ord a => a -> a -> Bool > ((Int base Int -> Int -> Int forall a. Num a => a -> a -> a - Int tmin) Int -> Int -> Int forall a. Num a => a -> a -> a * Int tmax) Int -> Int -> Int forall a. Integral a => a -> a -> a `div` 2 = Int -> Int -> Int loop (Int k Int -> Int -> Int forall a. Num a => a -> a -> a + Int base) (Int -> Int) -> Int -> Int forall a b. (a -> b) -> a -> b $ Int delta' Int -> Int -> Int forall a. Integral a => a -> a -> a `div` (Int base Int -> Int -> Int forall a. Num a => a -> a -> a - Int tmin) | Bool otherwise = Int k Int -> Int -> Int forall a. Num a => a -> a -> a + (((Int base Int -> Int -> Int forall a. Num a => a -> a -> a - Int tmin Int -> Int -> Int forall a. Num a => a -> a -> a + 1) Int -> Int -> Int forall a. Num a => a -> a -> a * Int delta') Int -> Int -> Int forall a. Integral a => a -> a -> a `div` (Int delta' Int -> Int -> Int forall a. Num a => a -> a -> a + Int skew)) isBasic :: Char -> Bool isBasic :: Char -> Bool isBasic = (Int -> Int -> Bool forall a. Ord a => a -> a -> Bool < Int initial_n) (Int -> Bool) -> (Char -> Int) -> Char -> Bool forall b c a. (b -> c) -> (a -> b) -> a -> c . Char -> Int ord