I am having difficulty understanding how a function can be a monad.
Function (->) r is a monad according to a declaration in Control.Monad.Instances:
instance Monad ((->) r) where
return x = \_ -> x
h >>= f = \w -> f (h w) w
Run Code Online (Sandbox Code Playgroud)
Even what Miran Lipovača says about it makes me confused:
The implementation for
>>=seems a bit cryptic, but it's really not all that. When we use>>=to feed a monadic value to …
在Oracle和MySQL中,如何创建一个带有无限数量参数的函数,以便可以像GREATEST(value1,value2,...)一样调用它?
通过某个标准比较两个值非常简单,但将"更大"的值传递给另一个比较是我似乎没有在SQL中工作.
谢谢!
编辑(在Mike的评论之后):我正在寻找比较多列的解决方案.具体而言,我的问题是如何将GREATEST()实现为UDF.以下代码比较了三列.
SELECT CASE WHEN CASE WHEN col_1 < col_2 THEN col_2
ELSE col_1 END < col_3 THEN col_3
ELSE CASE WHEN col_1 < col_2 THEN col_2
ELSE col_1 END END AS greatest
FROM figures;
Run Code Online (Sandbox Code Playgroud)
显然,这不是很好.拥有一个将相同的比较方法一遍又一遍地应用于值列表的通用函数会更有用.
通过SQL我的意思是任何SQL数据库产品,但我更喜欢在Oracle或MySQL中运行的解决方案
在 MySQL 中,可以在 SELECT 子句中创建的 GROUP BY 子句中使用别名(参见MySQL 参考)。
我只是想知道为什么不能在 GROUP BY 中创建别名并在 SELECT 中使用它,它遵循 SELECT 语句的执行顺序。
换句话说,为什么以下不合语法?
SELECT region, SUM(population)
FROM population_us_states
GROUP BY
CASE state_name
WHEN 'CT' THEN 'New England'
WHEN 'RI' THEN 'New England'
WHEN 'MA' THEN 'New England'
WHEN 'ME' THEN 'New England'
WHEN 'NH' THEN 'New England'
WHEN 'VT' THEN 'New England'
WHEN 'CA' THEN 'West Coast'
WHEN 'OR' THEN 'West Coast'
WHEN 'WA' THEN 'West Coast'
ELSE 'other' END AS region;
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个列表函数,它采用一个简单的列表并反馈一个列表列表,所有后者的元素与前一个元素具有相同的关系.
更具体地说,函数应该这样做:
let xs = [1,2,3,4,5,6,8,9,10]xs!!0 = xs!!1 - 1),则在它们之间创建一个列表中的列表.[[1,2,3,4,5,6],[8,9,10]]
缺席7将主要列表分为两个子列表.它们都是算术进展,常见差异为1.在第7章阅读了" 了解你的大好事"之后,我认为自己确实有了一个好主意,并且尝试过并且不光彩地失败了.欢迎帮助,拜托!
ghci> filter (\x y -> x + 1 == y) xs
"<"interactive">":1:8:
The lambda expression `\ x y -> x + 1 == y' has two arguments,
but its type `a -> Bool' has only one
In the first argument of `filter', namely `(\ x y -> x + 1 == y)'
In the expression: filter (\ x y …Run Code Online (Sandbox Code Playgroud)