- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我组成两个 fmap
Prelude> :t (fmap.fmap)
(fmap.fmap)
:: (Functor f, Functor f1) => (a -> b) -> f1 (f a) -> f1 (f b)
我得到一个函数,该函数将函数应用于结构的 2 个嵌套级别 f1
和 f
中的值。
而且我可以使用它——这正如我预期的那样有效:
Prelude> (fmap.fmap) (+1) [[1,2]]
[[2,3]]
如我所料的推断类型(围绕结果的 2 级结构)
Prelude> :t (fmap.fmap) (+1) [[1,2]]
(fmap.fmap) (+1) [[1,2]] :: Num b => [[b]]
以下不起作用。我也期待这一点(因为我们不能将 sum
应用于单个数字):
Prelude> (fmap.fmap) sum [[1,2]]
<interactive>:39:2: error:
• Could not deduce (Num (t0 b))
from the context: (Num (t b), Num b, Foldable t)
bound by the inferred type for ‘it’:
(Num (t b), Num b, Foldable t) => [[b]]
at <interactive>:39:2-24
The type variable ‘t0’ is ambiguous
• In the ambiguity check for the inferred type for ‘it’
To defer the ambiguity check to use sites, enable AllowAmbiguousTypes
When checking the inferred type
it :: forall (t :: * -> *) b.
(Num (t b), Num b, Foldable t) =>
[[b]]
Prelude> :t (fmap.fmap) sum [[1,2]]
(fmap.fmap) sum [[1,2]] :: (Num (t b), Num b, Foldable t) => [[b]]
但是!如果我将一个结构级别更改为 Maybe
类型:
Prelude> (fmap.fmap) sum Just [1,2]
Just 3
然后它开始工作,但在我看来打破了类型签名(fmap.fmap)::(Functor f, Functor f1) => (a -> b) -> f1 (f a) -> f1 (f b)
(因为它在第一层结构中应用了 sum
函数,而不是我预期的第二层结构)。
我认为问题在于我理解函数应用程序顺序如何在这里评估,因为我发现使用括号这在具有可折叠列表值的两个结构级别内按预期工作(与第一个示例中的数字相比):
Prelude> (fmap.fmap) sum (Just [[1,2],[2,3]])
Just [3,5]
但是这里发生了什么:
Prelude> (fmap.fmap) sum Just [1,2]
Just 3
为什么会跳过第一层结构?
这里的函数应用顺序是什么?
Haskell 如何推断最终类型?
Prelude> :t (fmap.fmap) sum Just [1,2]
(fmap.fmap) sum Just [1,2] :: Num t => Maybe t
为什么 Maybe t
而不是 Maybe List t
据我理解 (fmap.fmap)
必须确定 f1 (f b)
两层结构不是一层?
最佳答案
让我们计算一下,假设数字文字是 Int
为了简单起见。
(fmap.fmap) sum Just [1,2]
= fmap (fmap sum) Just [1,2]
| | \ -- an additional argument applied to the result of fmap
| \ -- the value with a type of the form f a with f Functor
\ -- the function to fmap
在这里,Just
是一个函数 [Int] -> Maybe [Int]
, 所以第一个 fmap
对仿函数 f = (->) [Int]
进行操作, 我们有 fmap = (.)
因为这就是它在 Functor ((->) [Int])
中的定义方式.
= (.) (fmap sum) Just [1,2]
= (fmap sum) (Just [1,2])
现在,fmap f (Just x) = Just (f x)
因为这就是Functor Maybe
已定义。
= Just (sum [1,2])
= Just 3
- why first level of structure skipped?
事实并非如此。第一级是(->) [Int]
.
- what is the order of function applications here?
普通话。 fmap.fmap
适用于 sum
.结果应用于 Just
.最终结果应用于[1,2]
.
- how does Haskell infer the final type?
它看到 Just
是一个“包裹在 (->) [Int]
仿函数中的值”,并使用它来实例化第一个 fmap
.第二个fmap
而是用在 Maybe
上自Just
以来的水平返回那个。
关于Haskell fmap 组成误区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63228395/
编辑:我将问题重新表述为更简单且不那么特定领域的问题: 在下面的代码中,我想实现 mplus 函数,该函数结合了受特定字段存在约束的两个函数。结果函数应受两个字段的存在的约束。 谢谢 ! import
我的代码有什么问题?提前致谢! 我正在尝试为我的 docker 容器设置一个虚拟主机。在本地主机上:8000 完美运行,但是当我尝试通过 http://borgesmelo.local/访问时,出现错
这个问题在这里已经有了答案: CSS technique for a horizontal line with words in the middle (34 个答案) 关闭 2 年前。 首先,这是
我是 React Js 的新手,并尝试了解如何通过 ajax 对从不同来源获得的数据进行组合(如下所述: Reactjs - loadResourcesFromServer - combine two
我一直在关注 this tutorial在 docker 服务和 swarms 上。但是我在不同 docker 容器之间的网络连接上遇到了一些问题。 以下是我的 docker-compose.yml
我正在尝试创建一个相对简单的设置来开发和测试 npm 包。事实上,一个问题是,在将代码卷安装到容器后,它会替换 node_modules。 我尝试了很多通常合乎逻辑的东西,主要是为了将 node_mo
我有四种类型A、B、C和D,初始值x Future[Option[A]] 和三个函数:f1: A => Option[B] , f2: B => Future[Option[C]] 和 f3: C =
我有一个包含单词的语料库。我想对他们做一个分析。我接受它们是土耳其字符,但其中一些不是。所以我想检查一个词是否不包含土耳其字符或数字。我的意思是: hey4 valid 33 vali
这是我正在为 Java 入门课解决的学校问题。作业是编写一个程序,生成一个由随机生成的二进制数组成的 8 x 8 矩阵,并让程序检查哪些列(如果有)全为 0,以及主对角线和次对角线是否也由零组成。主对
我正在尝试编写一个由任意数量的 lambda 函数组成的函数。 我有两个简单的 lambda 函数。 f = lambda x: x + 1 g = lambda x: x**2 我对组合函数的尝试是
我在这里学习 Docker Compose 教程 https://docs.docker.com/get-started/part5/#recap-optional version: "3" serv
我正处于要为应用程序编写 androidTests 的状态。 阅读 Testing Compose 的文档,我创建了一个文件并编写了一个简单的测试来检查进度: ExamineTest.kt: clas
我最近刚跨过木偶继承。围绕它的几个问题: 使用p继承是一种好习惯吗?一些经验丰富的木偶同事告诉我,木偶的继承不是很好,我不太相信。 来自OO世界,我真的很想了解木偶继承的原理,以及覆盖的原理。 最佳答
我正在尝试使用 docker-compose 创建一个基本网页 这是我的 yml 文件 identidock: build: . ports: - "5000:5000" envir
我们有docker-compose.yml,其中包含Kafka,zookeeper和schema registry的配置 当我们启动docker compose时,出现以下错误 docker-comp
我在玩 Haskell 的类型时无意中发现了 length 。总和 有效。是否有一些语义应该允许它工作,或者这仅仅是类型定义的一个缺点?我在下面编写了每个类型定义。 length :: Foldabl
如何防止缩小仅包含 JFormattedTextFields 的 JPanel。 JFormattedTextField textF1; JFormattedTextField textF2;
我尝试更 retrofit 载我的 Docker 卷的用户,但执行此操作的是“root”用户,而不是“安全用户”。知道如果我在 Dockerfile 中执行“chown -R/var/www”,这将不
我正在尝试将 scalaz 的 ioeffect IO[E,A] monad 用于一段非常有效的代码。 我试图用 IO[E,A] 在高层次上重写的代码需要一些关于存储在云中的文件的元数据。代码试图:
这个问题已经有答案了: What special characters must be escaped in regular expressions? (13 个回答) 已关闭 5 年前。 java中
我是一名优秀的程序员,十分优秀!