这必须非常简单,我很高兴在我的 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) 我是 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 确实包含一个插槽,但我看不到如何向上传递信息。任何人都可以建议前进的道路吗?
我最近看到一个简单的例子,它揭示了<*和*>。
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) 第一次使用lens。set并over变得足够简单,我认为这会很简单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)