想象一下:
f = (*10) . (+1)
Run Code Online (Sandbox Code Playgroud)
这是一个简单的方法来添加1然后乘以10.现在检查以下内容:
f = (* 10) . (-1)
Run Code Online (Sandbox Code Playgroud)
这-1是一个数字,而不是一个函数,我想知道是否有可用的函数来避免这种情况
\x -> x - 1
Run Code Online (Sandbox Code Playgroud)
或这个
flip (-) 1
Run Code Online (Sandbox Code Playgroud)
我知道他们是对的,但我不想让它成为那样.
在研究Monads时,我理解为什么当列表定义上的模式匹配失败时,它的计算会被"忽略"而不是抛出错误:
test :: [(Int, Int)]
test = [(x, y) | (Just x) <- [Just 1, Nothing, Just 3], y <- [1, 2]]
*Main> test
[(1,1),(1,2),(3,1),(3,2)]
Run Code Online (Sandbox Code Playgroud)
这是因为它只是一个语法糖的Monad使用应用程序do:
test'' :: [(Int, Int)]
test'' = do
(Just x) <- [Just 1, Nothing, Just 3]
y <- [1, 2]
return (x, y)
*Main> test'
[(1,1),(1,2),(3,1),(3,2)]
*Main> test == test'
True
Run Code Online (Sandbox Code Playgroud)
类似地,我们可以尝试使用bind运算符 类似于这个逻辑>>=:
test'' :: [(Int, Int)]
test'' = [Just 1, Nothing, …Run Code Online (Sandbox Code Playgroud) 有时我们想在列表中找到一个带有函数的元素a -> Bool并使用函数替换它a -> a,这可能会产生一个新的列表:
findr :: (a -> Bool) -> (a -> a) -> [a] -> Maybe [a]
findr _ _ [] = Nothing
findr p f (x:xs)
| p x = Just (f x : xs)
| otherwise = case findr p f xs of Just xs -> Just (x:xs)
_ -> Nothing
Run Code Online (Sandbox Code Playgroud)
主模块中是否有与此类似的功能?
表达式的类型random (mkStdGen 0)是Random a => (a, StdGen),所以我试过:
System.Random> random (mkStdGen 0) :: (Int, StdGen)
(9106162675347844341,1346387765 2103410263)
System.Random> random (mkStdGen 0) :: (Double, StdGen)
(0.9871468153391151,1346387765 2103410263)
Run Code Online (Sandbox Code Playgroud)
但是,为什么以下工作呢?
System.Random> random (mkStdGen 0)
(9106162675347844341,1346387765 2103410263)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它如何"猜测"一种类型?
看一看:
myEntity :: Entity Post
myEntity = ...
myValue :: Entity Post -> Post
myValue = <someFunction>
myKey :: Entity Post -> PostId
myKey = <someOtherFunction>
Run Code Online (Sandbox Code Playgroud)
是someFunction和someOtherFunction存在于yesod还是我需要创建它们?
我有一个这样的模块:
module Model where
import FlowType
.
.
.
Run Code Online (Sandbox Code Playgroud)
我正在使用FlowTypeinModel的主体,但我也想与模型的函数 FlowType 一起导出。我找到了一个具有以下语法的模块:
module Import
( module Import
) where
import Foundation as Import
.
.
.
Run Code Online (Sandbox Code Playgroud)
这是什么module Import ( module Import) where???我如何在我的Model模块中做同样的事情(并导出它自己的函数)?