Чистейший путь, для последних библиотек (те, которые поставляются с GHC 7.8 или более поздней версии), чтобы использовать finiteBitSize
из Data.Bits
. Это именно то, что вы запросили. С более ранними версиями вы можете использовать bitSize
, также от Data.Bits
, не полную версию того же самого. В частности, bitSize
выдаст исключение, если ему дается что-то вроде Integer
, у которого нет битового размера. finiteBitSize
находится в подклассе FiniteBits
, поэтому применение его к Integer
даст ошибку типа. В последних библиотеках также есть bitSizeMaybe
, но это, как правило, менее полезно.
Попробуйте использовать ['sizeOf'] (https://hackage.haskell.org/package/base/docs/Foreign-Storable.html#v:sizeOf) и умножить на 8? – Rufflewind
Спасибо, очень просто, как я подозревал. Вы хотите ответить на этот вопрос? – OllieB
Также обратите внимание, что Haskell указывает только, что 'Int' должен быть не менее 29 бит. GHC, наиболее распространенный компилятор, использует собственную точность машины. –