haskell-jp / beginners #2

@ has joined the channel
set up a reminder “
beginnersチャンネルは、新しい人がスムーズにHaskellに慣れるための質問を歓迎するチャンネルです。
Haskell-Beginners ML や IRCの#haskell-beginners や RedditのMonthly Hask Anythingのような位置づけを意図しています。

beginnersチャンネルでの回答側は、以下の左側のような応答を厳禁とする運用です。
• それはくだらない質問だ → くだらない質問など無い
• その質問は以前にもあった → 質問者はそんなこと知らない
• Google検索せよ → 検索できないから質問している
beginnersチャンネルでは、例えば以下のレベルの質問から歓迎します。
: とは何のことですか。
• タプルとは何ですか。
” in this channel at 9AM on the 1st of every month, Japan Standard Time.
set up a reminder “
beginnersチャンネルは、新しい人がスムーズにHaskellに慣れるための質問を歓迎するチャンネルです。
Haskell-Beginners ML や IRCの#haskell-beginners や RedditのMonthly Hask Anythingのような位置づけを意図しています。

beginnersチャンネルでの回答側は、以下の左側のような応答を厳禁とする運用です。
• それはくだらない質問だ → くだらない質問など無い
• その質問は以前にもあった → 質問者はそんなこと知らない
• Google検索せよ → 検索できないから質問している
beginnersチャンネルでは、例えば以下のレベルの質問から歓迎します。
: とは何のことですか。
• タプルとは何ですか。
” in this channel at noon on the 1st of every month, Japan Standard Time.
set up a reminder “
beginnersチャンネルは、新しい人がスムーズにHaskellに慣れるための質問を歓迎するチャンネルです。
Haskell-Beginners ML や IRCの#haskell-beginners や RedditのMonthly Hask Anythingのような位置づけを意図しています。

beginnersチャンネルでの回答側は、以下の左側のような応答を厳禁とする運用です。
• それはくだらない質問だ → くだらない質問など無い
• その質問は以前にもあった → 質問者はそんなこと知らない
• Google検索せよ → 検索できないから質問している
beginnersチャンネルでは、例えば以下のレベルの質問から歓迎します。
: とは何のことですか。
• タプルとは何ですか。
” in this channel at noon on the 1st of every month, Japan Standard Time.
お客さん来ませんね:slightly_smiling_face:、最近はあまりニーズないのかなぁ、、、:thinking_face:

とは言え、ゆくゆく新しい人々が投稿しやすくなるように、例題として自作自演でQ&Aを書いてみます。
昔Haskellを触り始めたころの疑問などを思い出して。
(平日昼間はだいたいオフラインなので、気長に週末連載くらいで。ノイズになったらすみませんね。)
ghciコマンドの終了方法を知りたいです。
次のように :q コマンドにより終了できます。

Prelude> :q

さらに、`:help` で簡単なヘルプが表示されます。
最近Haskellを学び始めたものです
githubを漁っていると,
data Piece = Piece !Color !PieceType
というようなものを見たのですが,この`!` の意味がわかりませんでした.
検索しても英語の解説しか見つからず,遅延評価が関係していそうなことはわかったのですが,理解できませんでした.
どなたか教えていただけないでしょうか?
取り急ぎ一言で言うと、値コンストラクターの指定したフィールドを遅延評価 させない (正格評価する)ための演算子です。
日本語での解説はぱっとググったところ http://walk.northcol.org/haskell/eval-strategies/#_%E6%AD%A3%E6%A0%BC%E6%80%A7%E3%83%95%E3%83%A9%E3%82%B0 が出ました。
もう少し詳しいものはないか...
ありがとうございます!
続けて申し訳ないのですが、フィールドを正格評価にする利点は何なのでしょうか?
主なメリットは速度やメモリー消費量を向上させやすい(というより、遅延評価によるパフォーマンスの低下を回避しやすい)ですね。
https://haskell.e-bigmoon.com/posts/2018/06-25-all-about-strictness が参考になるかと思います。
なるほど、わかりました。
ありがとうございます!
老婆心から捕捉すると、スペースリークと呼ばれる、遅延評価ならではの現象はHaskell習いたてのうちは怖く感じられるものですが、それほど大きなデータを扱わないうち、あるいは長時間動作する必要があるアプリケーションを書かないうちはあまり気にしなくてもいいです。
予防的にとりあえず StrictData を有効にしたり正格性フラグを有効にするクセをつけておくのは良い作戦ですが。
まだ習いたてなので知らなかったのですが、少し見たところhaskellのよくある問題点なんですね…
参考にして勉強させていただきます
Welcome:tada:

確かに、この ! は初見で戸惑わせますね。
igrepさんの説明の通り、"正格性フラグ(Strictness Flag)"という機能です。
値を評価するタイミングを制御するための機能なので、処理性能やメモリ効率を追求する局面で必要になるものです。`!`の有無で論理的な挙動は、ほぼ変わりません。

将来的に、ここを追求する場合は、以下のあたりも役立つと思います。
https://qiita.com/advent-calendar/2015/haskell-space-leaks
@broccoli has joined the channel
@ has joined the channel
はじめまして。1年前くらいにAtomとSupercolliderで少しライブコーディングを勉強した初心者です。
久しぶりにアップデートしていじろうとしたところ、d1関数やsound関数がどこかにいってしまったようで…
解決方法がわかる方がいらっしゃいましたらご教授いただきたいです。
!!すみません、通知に気づかず&こちらでも聞いたら早いかなと思い、、ありがとうございます!!
@Yuki Takao has joined the channel
PotassiumIodide
@PotassiumIodide has joined the channel
@ has joined the channel
@kim chaegon has joined the channel
@Kibor has joined the channel
この問題って解決したのかな。
お返事返せておらず申し訳ありません。いまパソコンが手元にないため、帰宅し次第ご報告させてください。泣
そうなんですね!わからないことがあれば、何でも聞いてくださいね!
ありがとうございます!感謝です。
次の例で、マイナスの数値がエラーになります。対策はありますか? [Q&A例]

f x = x * -1
Haskellの言語仕様では、 上記のような、中置演算子の * と、単項演算子の - を連続で書けません。
次のように、単項演算子側をカッコでくくる必要があります。

f x = x * (-1)

なお、GHCの NegativeLiterals 言語拡張を使うと、この制約を解消できます。


{-# LANGUAGE NegativeLiterals #-}

f x = x * -1
@Nicolas has joined the channel
@user has joined the channel
@SaishinInoue has joined the channel
ghcupの使い方 
curl  -sSf | sh # ghcupをインストール
ghcup install 8.6.5 # GHC 8.6.5をインストールする
ghcup set 8.6.5 # 8.6.5を使う
ghcupで打つと
-bash: ghcup: command not found
と出てきます
Haskell初心者です。[Just 4,Just 3]を[4,3]に移す関数は作れるのでしょうか??
よろしくお願いします。
preludeを解除するにはどうすればいいでしょうか?
[Nothing,Just 4,Just 3] 、`[Just 4,Nothing,Just 3]` はそれぞれどうなりますか?
{-# LANGUAGE NoImplicitPrelude #-} をファイルの先頭に加えるか、`import Prelude ()`とするとPreludeのインポートをなくすことができます
ありがとうございます
(-1)を返すでよろしくお願いします。
(-1)と[4,3]は型が違うので、それは不可能です。Data.MaybeモジュールのcatMaybesはいかがでしょうか?
[Nothing,Just 4] には[-1,4]でよろしくお願いします。
map (maybe (-1) id)これでどうでしょう
できました!ありがとうございます!
@shingo suzuki has joined the channel
Q. f $ g xのような式の中で、fに渡される値を見るにはどうすれば良い?
A. Debug.Trace (base)の traceShowIdを f $ traceShowId $ g x のように挟めばよい
@ has joined the channel