ソクラテスもどき
最近M氏との対話からネタというか疑問が生まれることが多い。
お前はソクラテスか、…という人はおらんと思うけど、
今回もHaskellで引っかかったネタを。(毎度勝手に書いてごめん)
氏いはく、
型を返す関数は作りたい。
ということらしい。
range :: Particle -> (何か型)
つまり
range (一次元Particle) => Double range (三次元Particle) => Vector3
で、
move :: Particle -> Time -> range Particle (type Time = Int)
見たいな事がしたいらしい?
(ParticleがTime時間後どこに行くのかを求めるとのこと)
さすがにこんな記法はだめじゃろ…
たんにモノによって関数の返る型を変えたいのであれば
move :: Particle p => p r -> Time -> r
Particleがあらかじめrangeの型を保持しておけば
出来るんじゃないのか?
と提案したところ、まぁ、なんかそんな感じかなぁということで
納得してもらえた?ようである。
ただし、こっちはこっちでParticleの形になんだかいやな制限が
加わったような気がしないでもない。
その後で考えたところ、本気で適当な型を返したければ
Data.TypableのTypeRepが使えるし、
任意の型のデータを返したければ
Data.Dynamicの関数群を使えば出来るような気もする。
でもDynamicって正直どうなの?とも思うし、あまりよくないようにも思う。
よく考えると、そもそもその辺の各Particle固有のデータを外に
出さない設計のほう良いのでないか?
move :: Particle -> Time -> Particle transform :: Particle -> Coordinate
とか、適当に隠蔽するとか。
うーん…今回はよく分からん文章になった。
というか、自分でもなんだか意味がよく分からない。
あかん、全然真理が導き出せてへんで。