在Haskell中,我们使用术语"section"来表示在中缀位置使用的部分应用函数.例如,对于一个函数foo :: a -> b -> c和值x :: a和y :: b,我们有两节
s1 = (x `foo`) :: b -> c == \b -> foo x b
Run Code Online (Sandbox Code Playgroud)
和
s2 = (`foo` y) :: a -> c == \a -> foo a y
Run Code Online (Sandbox Code Playgroud)
在类别理论,然而,一个段g的f定义为一个右逆f(以便f . g == id).
我没有看到两个定义之间有明显的联系.例如,s1显然不是反向foo,至少不是在Hask中.我想s1甚至不必在Hask中有反转.
类别理论定义是否是Haskell定义的来源,如果是,如何?
我偶然发现了fold ((,) <$> sum <*> product)带有类型签名的这段代码,:: (Foldable t, Num a) => t a -> (a, a)我完全迷失了.
我知道它的作用,但我不知道怎么做.所以我试着把它分成几小块:
?: :t (<$>)
(<$>) :: Functor f => (a -> b) -> f a -> f b
?: :t (,)
(,) :: a -> b -> (a, b)
?: :t sum
sum :: (Foldable t, Num a) => t a -> a
Run Code Online (Sandbox Code Playgroud)
一切都很好,只是基本的东西.
?: :t (,) <$> sum
(,) <$> sum :: (Foldable t, Num a) => t a …Run Code Online (Sandbox Code Playgroud) 我想在 10% 的时间内随机选择“1”,在 30% 的时间内随机选择“2”,在其他 60% 的时间内随机选择“3”。我想知道是否有一种方法可以让我根据 Java 中的这些概率随机抽样。
谢谢
我正在阅读haxl-Haxl的源代码.Core我发现了以下代码
data BlockedFetch r = forall a. BlockedFetch (r a) (ResultVar a)
Run Code Online (Sandbox Code Playgroud)
并意识到我不完全理解ExplicitForall/ 的用法ExistentialQuantification.
上面的代码片段在哪些方面有所不同
data BlockedFetch r a = BlockedFetch (r a) (ResultVar a)
Run Code Online (Sandbox Code Playgroud)
为什么我可以"省略"数据声明的lhs上的类型参数.
我在haskell编码,想知道如何在多列表中找到某个元素.
这里举个例子说:
x = [(1,2,3,4,5),
(3,4,5,6,6),
(5,6,2,1,1),
(1,2,5,6,2)];
Run Code Online (Sandbox Code Playgroud)
假设我想找到每个列表的第3个元素.
所以该程序将打印出4,6,1,6
我知道!! 但是当我做x之类的事情时!3,它打印出第三行(1,2,5,6,2).
我想要它所以它打印出每个列表的第3个元素.