起初,我想研究一下如何Integer从类中派生出来Ord
我在 GHC.Classes 中得到了这个定义
\ninstance Ord Integer where\n (<=) = leInteger\n (>) = gtInteger\n (<) = ltInteger\n (>=) = geInteger\n compare = compareInteger\nRun Code Online (Sandbox Code Playgroud)\ncompareInteger指向另一个源文件,GHC.Integer.Type. 它的定义如下\xe2\x80\xaf:
compareInteger :: Integer -> Integer -> Ordering\ncompareInteger (Jn# x) (Jn# y) = compareBigNat y x\ncompareInteger (S# x) (S# y) = compareInt# x y\ncompareInteger (Jp# x) (Jp# y) = compareBigNat x y\ncompareInteger (Jn# _) _ = LT\ncompareInteger (S# _) (Jp# _) = LT\ncompareInteger (S# _) (Jn# …Run Code Online (Sandbox Code Playgroud) I\xe2\x80\x99m 使用这个字符,双锐号\'\',unicode 是 0x1d12a。
\n如果我在字符串中使用它,我可以\xe2\x80\x99t 获得正确的字符串长度:
str = "F"\nstr.length // returns 3, even though there are 2 characters!\nRun Code Online (Sandbox Code Playgroud)\n\n如何让函数返回正确的答案,无论 I\xe2\x80\x99m 是否使用特殊的 unicode \xe2\x80\xaf?
\n我正在从用户必须输入的输入中读取几行内容:
main :: IO ()
main = do
let size = 3
arr <- replicateM size getLine
let pairs = map parsePair arr
print pairs
Run Code Online (Sandbox Code Playgroud)
为什么我可以map parsePair arr在单独的行上做而不是在同一行上做,像这样:
arr <- map parsePair (replicateM size getLine)
Run Code Online (Sandbox Code Playgroud)
这样做,我得到了错误?:
• Couldn't match type ‘[]’ with ‘IO’
Expected type: IO [Int]
Actual type: [[Int]]
Run Code Online (Sandbox Code Playgroud)
为了给您更多细节,这里是parsePair:
parsePair string = map parseInt $ words string
parseInt :: String -> Int
parseInt s = read s :: Int
Run Code Online (Sandbox Code Playgroud) 我见过这两种方法?:在这个例子中,这是从 Dan Abramov 的课程中获取的,他正在使用这种方法?:
const render = () => {
ReactDOM.render(
<Counter
value={store.getState()}
onIncrement={() =>
store.dispatch({
type: 'INCREMENT'
})
}
onDecrement={() =>
store.dispatch({
type: 'DECREMENT'
})
}
/>,
document.getElementById('root')
);
};
store.subscribe(render);
Run Code Online (Sandbox Code Playgroud)
Redux 中的 store.subscribe() 函数允许添加在分发操作时调用的侦听器。
在另一个示例中,这是 Redux 文档中的一个示例?:
render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
)
Run Code Online (Sandbox Code Playgroud)
不使用 store.subscribe ,而是将整个 App 包装在一个<Provider>组件中。
这两种方法有什么区别??看起来他们正在做同样的事情,那就是确保应用程序具有最新版本的状态。
如果我已经用<Provider>.
haskell ×2
do-notation ×1
ghc ×1
io ×1
io-monad ×1
javascript ×1
monads ×1
reactjs ×1
redux ×1
redux-store ×1
unicode ×1