module Bits ( cLog ) where import Data.Bits (FiniteBits, countTrailingZeros, popCount) import Data.Int (Int64) cLog :: FiniteBits a => a -> Maybe Int64 cLog :: forall a. FiniteBits a => a -> Maybe Int64 cLog a n | a -> Int forall a. Bits a => a -> Int popCount a n Int -> Int -> Bool forall a. Eq a => a -> a -> Bool == Int 1 = Int64 -> Maybe Int64 forall a. a -> Maybe a Just (Int -> Int64 forall a b. (Integral a, Num b) => a -> b fromIntegral(Int -> Int64) -> Int -> Int64 forall a b. (a -> b) -> a -> b $a -> Int forall b. FiniteBits b => b -> Int countTrailingZeros a n) | Bool otherwise = Maybe Int64 forall a. Maybe a Nothing