Попробуйте установить без кеширования: pip install --no-cache-dir tensorflow
.
В отличие от Maybe
, Monad
не является типом ; это typeclass .
То же самое касается других типов:
Num :: * -> Constraint
Functor :: (* -> *) -> Constraint
Bifunctor :: (* -> * -> *) -> Constraint
Где *
представляет конкретные типы (например, Bool
или Int
), ->
представляют типы более высокого типа (такие как Maybe
), а Constraint
представляет идею ограничения типа. Вот почему:
Как известно, мы не можем сделать такую подпись:
return :: a -> Monad a -- This is nonsense!
Поскольку Monad
следует использовать как ограничение , чтобы сказать, что «это должна быть монада для работы»:
return :: (Monad m) => a -> m a
Мы делаем это, потому что знаем, что return
не может работать ни с одним старым типом m
, поэтому мы определяем поведение return
для разных типов под именем Monad
. Другими словами, нет ни одной вещи, которую можно назвать Монадой, а только поведения, которое можно назвать монадическим.
По этой причине мы создали это ограничение типа, говоря, что мы должны были предварительно определить что-то в качестве Монады, чтобы использовать эту функцию. Вот почему Monad
является (* -> *) -> Constraint
- он сам по себе не является типом!
Maybe
является экземпляром Monad
. Это означает, что где-то кто-то написал:
instance Monad Maybe where
(>>=) = ... -- etc
... и определил, как Maybe
должен вести себя как Монада. Вот почему мы можем использовать Maybe
с функциями или типами, которые имеют ограничение префикса Monad m => ...
. Это по существу, где определяется ограничение, примененное Monad
.
Constraint
является видом, например. Show Int
, Monad Maybe
и Monoid [a]
. Грубо говоря, это то, что может происходить в левой части =>
в аннотациях типа.
Теперь, поскольку
Show Int :: Constraint
и Int
- тип, т.е.
Int :: *
, мы можем присвоить функциональный вид Show
следующим образом
Show :: * -> Constraint
^-- the result kind
^-- the kind of Int
. В вашем случае просто происходит, что Monad
принимает аргумент, подобный Maybe
, поэтому
Maybe Int :: *
Maybe :: * -> *
Monad :: (* -> *) -> Constraint
^-- the result kind
^-- the kind of Maybe