(**)
- возведение в степень с плавающей точкой.Вы, вероятно, хотите использовать (^)
вместо этого.
f :: (Bool,Int) -> Int
f (True,n) = 2^n
f (False,n) = 0
Полезно взглянуть на типы:
Prelude> :t (**)
(**) :: Floating a => a -> a -> a
Prelude> :t (^)
(^) :: (Num a, Integral b) => a -> b -> a
Сообщение об ошибке сообщает, что Int
не является экземпляром класса типов Floating
, и поэтому выне может использовать (**)
на нем напрямую.Вы можете конвертировать в некоторый тип с плавающей точкой и обратно, но здесь лучше просто использовать интегральную версию напрямую.Также обратите внимание, что (^)
требует, чтобы показатель только был целым.База может быть любого числового типа.