- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试理解一些 Haskell 代码。
这是有道理的。
Prelude> fmap (+1) (Just 1)
Just 2
这也是有道理的。
Prelude> (fmap.fmap) (+1) (Just [1])
Just [2]
但我不明白这是如何工作的。
Prelude> (fmap.fmap) (+1) Just 1
Just 2
我已经尝试过将零件加工出来。在我看来,这就是正在发生的事情。
(fmap (fmap (+1)) Just) 1
我尝试输入子表达式。
这是有道理的。
Prelude> :t fmap (+1)
fmap (+1) :: (Functor f, Num b) => f b -> f b
这仍然有道理。
Prelude> :t fmap (fmap (+1))
fmap (fmap (+1)) :: (Functor f, Functor f1, Num b) =>
f (f1 b) -> f (f1 b)
但是我不明白这个。
Prelude> :t fmap (fmap (+1)) Just
fmap (fmap (+1)) Just :: Num b => b -> Maybe b
带有类型的函数是如何实现的
(Functor f, Functor f1, Num b) => f (f1 b) -> f (f1 b)
应用 Just
后,其类型为:
a -> Maybe a
结果是这种类型吗?
Num b => b -> Maybe b
问题confused about function as instance of Functor in haskell可能与此有关,但我仍然很困惑。
最佳答案
发生的事情是 f
解析为仿函数 (->) a
,而 f1
解析为 Maybe
,自从
Just :: (->) a (Maybe a)
因此,如果我们使用上述绑定(bind)编写 fmap (fmap (+1))
的类型,我们会得到:
fmap (fmap (+1)) :: Num b => (->) a (Maybe b) -> (->) a (Maybe b)
将 (->)
重写为中缀构造函数,我们得到:
fmap (fmap (+1)) :: Num b => (a -> Maybe b) -> (a -> Maybe b)
现在我们将其应用于 Just::a -> Maybe a
所以我们得到
fmap (fmap (+1)) Just :: Num a => a -> Maybe a
关于haskell - fmap 如何与数据构造函数一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48971234/
下面是我正在测试的示例代码 import Control.Exception safeLoad :: FilePath -> IO (Either IOException String) safeLo
下面是我正在测试的示例代码 import Control.Exception safeLoad :: FilePath -> IO (Either IOException String) safeLo
我正在使用 GHCi(版本 6.12.3)和 Haskell 一起玩。我最近阅读了有关仿函数和应用仿函数的文章,我想如果你不能找到类似于 的东西的话。应用仿函数的数量只能使用仿函数的原语来实现。经过
我浏览了一篇文章( http://comonad.com/reader/2012/abstracting-with-applicatives/ )并在那里找到了以下代码片段: newtype Comp
fmap.fmap允许我们“深入两层”进入仿函数: fmap.fmap :: (a -> b) -> f (g a) -> f (g b) 这也适用于应用仿函数吗?假设我想合并 Just (+5)和
我发现自己越来越频繁地做这样的事情...... 我有一个函数 f::IO [a] 然后我想对其应用一个 g::a -> b 类型的函数,以获得 IO [b]。 还有很长的路要走: x x 现在我更愿
我正在阅读《Programming in Haskell》第二版,我看到了这句话: ... there is only one way to make any given parameterised
模式解析错误:f。克 我是初学者,哪里错了? (f . g) x = f (g x) class Functor f where fmap :: (a -> b) -> f a ->
我正在阅读精彩的文章 Haskell Programming from first principles,这是我一生中最开心的时光。我得到了以下我无法拆开的示例(第 1286 页电子阅读器): Pre
我不明白这个简单的表达式类型在 Haskell 中如何检查 (fmap.fmap) sum Just [1, 2, 3] fmap 的组合类型为: fmap.fmap :: (Functor f1
在 ghci 我可以这样做: ghci> (fmap . const) 5 [1,2,3,4,5] [5,5,5,5,5] 但如果我尝试提取子表达式 (fmap . const)进入一个变量我得到一个
我希望拥有无穷无尽的随机或不确定的数字。我继续这样编程: supply :: Monad m => (Int -> m Int) -> m [Int] supply action = sequence
我知道括号会强制执行不同的操作顺序,但我不太明白第一个结果: >> (fmap length Just) [1, 2, 3] 1 而以下内容非常有意义 - 我们将长度函数提升到 Just 结构上,因此
如果我组成两个 fmap Prelude> :t (fmap.fmap) (fmap.fmap) :: (Functor f, Functor f1) => (a -> b) -> f1 (f a
所以假设我想定义一个包含函数的新类型: newtype Test m a = Test(m -> (a, m)) 这可以用来容纳某种状态。 现在假设我想为这个新类型实现 fmap。 instance
考虑以下包装器: newtype F a = Wrap { unwrap :: Int } 我想反驳(作为一个练习,让我的头脑围绕 this interesting post )有一个合法的 Func
给定以下类型族(应该反射(reflect)同构 A×1 ≅ A) type family P (x :: *) (a :: *) :: * where P x () = x P x a =
Haskell的Prelude中是否存在这样的事情? wfmap :: Functor f => a -> (a -> b) -> (b -> a) -
我想更改所有文字。 data Expressions a = ListExpression String[Expressions a] | BinaryExpression String (Expre
我正在尝试理解一些 Haskell 代码。 这是有道理的。 Prelude> fmap (+1) (Just 1) Just 2 这也是有道理的。 Prelude> (fmap.fmap) (+1)
我是一名优秀的程序员,十分优秀!