No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 871 | 872 | 873 |...| 1338 | 1339 | 1340 || Next»

立体駐車場に迷い込む

郊外のショッピングモールとか行くと巨大な駐車場があるのだけど400ccのバイクとかどこにとめればいいのか分からないことが多い.自転車用のところに置くわけにはいかないし.

で,今日は初めて行ったところで立体駐車場に迷い込んでみた.整理のおじちゃんたちも何も言わなかったからきっと問題ないのだろう.

閑話休題.

駐車場のゲートもETCにしてくれないかなぁ……

寒いんだけど暑い

外は寒いのだけど電車内とか部屋の中とかが暑すぎる.こんなに気温差作って何が楽しいのやら.

電力消費もヤバイらしく93%を超えたあたりで「節電しましょう」の一斉放送があった.暖房を付けずにPCに重たい計算をさせるのが建設的だと思う.

閑話休題.

復讐ちゃん1位になれなかったのか.残念.

今日のエラーメッセージ

Template Haskell でゴニョゴニョしてたら GHC がパニクった.

TTreeB.hs:69:3:ghc: panic! (the 'impossible' happened)
  (GHC version 7.2.2 for x86_64-unknown-linux):
	unknownNameSuggestErr UnhelpfulSpan
 
Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug

まあ,生成したプログラムがおかしいんだろうけどデバッグめんどくさい……

今日の迷惑メール

タイトル「魔女の宅急便のキキについて」

本文「魔女の宅急便のキキは自分の事しか考えてない」

……

だから何なんだか.

トラックボール導入

なんとなくトラックボールを導入した.Logicool の M570.Unifying レシーバ対応なのでキーボードと一緒にレシーバ1つで済むのが有難いかも.

とりあえず,左クリックをしようと思ったときにボールを押し込む動作をしてしまう癖があるらしい事が判明した.なぜだらう? 親指が痛い……

RecordWildCards が便利だなぁ

Type class で可換半郡を次のように書いていた.

class CommutativeMonoid a where
    oplus :: a -> a -> a,  -- commutative, associative
    identity::a           -- the identity of oplus
data Bag a = Bag [a] deriving (Show,Ord,Read)
instance CommutativeMonoid (Bag a) where
  oplus (Bag a) (Bag b) = Bag (a ++ b)
  identity = Bag []

んで,type class だと不都合が生じたのでレコードで演算をまとめて持ち運ぶようにしたのだけど,定義部分に限っては RecordWildCards を使うとほとんど同じように書ける.演算の集合を定義するという点では type class でもレコードでも手間は大して変わらないっぽいねと. 楽だし簡潔でいい.

data CommutativeMonoid a = CommutativeMonoid {
    oplus :: a -> a -> a,  -- commutative, associative
    identity::a           -- the identity of oplus
    }
data Bag a = Bag [a] deriving (Show,Ord,Read)
bagMonoid = CommutativeMonoid { .. } where   
  oplus (Bag a) (Bag b) = Bag (a ++ b)
  identity = Bag []

インスタンス宣言に同じクラスの別のインスタンスを使う,例えば

instance (CommutativeMonoid a, Ord c) => CommutativeMonoid (Map c a) where
  oplus x y = unionWith oplus x y
  identity = empty

とかも

mapMonoid m = CommutativeMonoid { .. }  where
  oplus x y = let CommutativeMonoid {..} = m in unionWith oplus x y
  identity = empty

と書けばほとんど同じ雰囲気かね.let を内側で使ってあげるのが大事.下のようにやると定義の本体の oplus が新しく定義される oplus になっちゃうのでエラーを食らう.

mapMonoid (CommutativeMonoid {..}) = CommutativeMonoid { .. }  where
  oplus x y = unionWith oplus x y
  identity = empty
«Prev || 1 | 2 | 3 |...| 871 | 872 | 873 |...| 1338 | 1339 | 1340 || Next»
Search
Feeds

Page Top