Haskell勉強-演算
code:haskell
main = do
a <- 1
b <- 2
c <- a + b
怒られる…
code:Error
The last statement in a 'do' block must be an expression c <- a + b
インデントそろってない時とかに出るErrorらしいけどインデントそろってるんだよなぁ…
めっちゃアホやってた…
<-これ使うの代入だったよ…
宣言だったら=でいい…
code:haskell
main = do
let a = 2
let b = 3
print $ a + b
print $ a - b
print $ a * b
print $ a / b
print $ mod a b
なんかエラーでる…
mod 以外は通る。modが通らない
code:Error
? Ambiguous type variable ‘a0’ arising from a use of ‘mod’
prevents the constraint ‘(Integral a0)’ from being solved.
Relevant bindings include
b :: a0 (bound at numericalCalculation.hs:3:9)
a :: a0 (bound at numericalCalculation.hs:2:9)
Probable fix: use a type annotation to specify what ‘a0’ should be.
These potential instances exist:
instance Integral Integer -- Defined in ‘GHC.Real’
instance Integral Int -- Defined in ‘GHC.Real’
instance Integral Word -- Defined in ‘GHC.Real’
...plus one instance involving out-of-scope types
(use -fprint-potential-instances to see them all)
? In the second argument of ‘($)’, namely ‘a mod b’
In a stmt of a 'do' block: print $ a mod b
In the expression:
do let a = 2
let b = 3
print $ a + b
print $ a - b
....
|
8 | print $ a mod b
| ^^^^^^^^^
エラー読む限り型がおかしい、Integer,Int,Word(?)の三つしかmodは使えないと言っている
だが、どう見てもaもbもintだ(宣言はしてないが…)
宣言してみた
code:Haskell
main = do
let a = 2
let b = 3
print $ a + b
print $ a - b
print $ a * b
print $ a / b
print $ mod (a::Int) (b::Int) --hoge::Type で型宣言になるらしい
a/bでエラー吐くようになった…
/にIntを使うなとのことだ
どうしろというのだ…
もしかして宣言ってどこでやっても全体に波及する?
ちょっと気になったので実験
code:Haskell
main = do
let c=2.0::Double
let d=3::Int
print $ c + b
エラーで落ちた…
DoubleをIntに変換できないとのことだ
型の強制力強いな…
これ複数の型が入り乱れる計算どうすんだ?
すごいHな本が着たら見てみよう
書いてあるかは知らんけども
なんかすごく疲れたのでここまで
合計4h(+2h)