小编use*_*011的帖子

Haskell 笛卡尔积,带过滤器的 Monad

这必须非常简单,我很高兴在我的 Haskell 经验中目前无法弄清楚这一点。我想要列表与其自身的笛卡尔积,但我想过滤掉相同的项目。我不需要后置过滤器。

这让我找到了 CP - 似乎是为了简单地添加一个过滤器而设置的......

p as bs = do
            a <- as
            b <- bs
            return (a,b)

p [1,2,3] [1,2,3]
[(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)]
Run Code Online (Sandbox Code Playgroud)

我读过这return ()基本上是 do 表示法中的 noop - 但这不能编译。(元组是否混淆了)

pf as bs = do
            a <- as
            b <- bs
            if a == b then return () else return (a,b)

* Couldn't match type `()' with `(a, a)'
      Expected type: [(a, a)]
        Actual type: [()]

Run Code Online (Sandbox Code Playgroud)

我尝试了其他一些东西,比如if'Haskell wiki 中的函数。我也尝试过when没有成功。当过滤器为when

when (a /= …
Run Code Online (Sandbox Code Playgroud)

monads haskell filter

7
推荐指数
2
解决办法
303
查看次数

如何在 HTML 父子关系中使用 2 个 Svelte 组件将数据从子级传递到父级

我是 Svelte 的新手。我在 HTML 父子关系中有 2 个 Svelte 组件——而不是 Svelte P/C 关系(其中 1 个 Svelte 组件导入另一个)。

最终,我想要这样的东西(可能有很多 Accs。):

  <Accordion header={--property from SvelteComponent-- }>
    <SvelteComponent />
  </Accordion>
Run Code Online (Sandbox Code Playgroud)

我希望 SvelteComponent 定义 Accordion 中使用的标头(它可以是动态的)。我可以为此使用商店,但这似乎太混乱了。Accordion 确实包含一个插槽,但我看不到如何向上传递信息。任何人都可以建议前进的道路吗?

parent-child svelte-3

5
推荐指数
1
解决办法
5032
查看次数

应用运算符 &lt;* 和 *&gt;,类型签名含义

我最近看到一个简单的例子,它揭示了<**>

validate :: String -> Maybe String
validate s =  if s=="" then Nothing else Just s

>validate "a" *> validate "b"
Just "b"
>validate "" *> validate "b"
Nothing
>validate "a" <* validate "b"
Just "a"
>validate "a" <* validate ""
Nothing
>validate "a" <* validate "b" <* validate "c"      
Just "a"
>validate "a" *> validate "b" <* validate "c"      
Just "b"
Run Code Online (Sandbox Code Playgroud)

这表明,即使其产生的价值并不重要,但其效果却很重要。

我的问题是关于类型签名。

(*>) :: f a -> f b -> f b
(<*) …
Run Code Online (Sandbox Code Playgroud)

implementation haskell applicative type-signature

5
推荐指数
1
解决办法
254
查看次数

Haskell镜头:视图没有像结束和设置那样引用?

第一次使用lenssetover变得足够简单,我认为这会很简单view:使用相同的方案来引用内部部分,但不提供新的值或函数。但是不。tst3 below gives the error below the code。有人知道发生了什么事吗?

-- Testing lenses
tst1 = set (inner . ix 0 . w) 9 outer
tst2 = over (inner . ix 0 . w) (+2) outer
tst3 = view (inner . ix 0 . w) outer       -- this line errors out

    * No instance for (Monoid Int) arising from a use of `ix'
    * In the first argument of `(.)', namely `ix 0' …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-lens

4
推荐指数
1
解决办法
148
查看次数