Skip to content

Instantly share code, notes, and snippets.

@uduki
uduki / Main.hx
Last active August 29, 2015 14:05
Haxeでの構造体の拡張
package;
import cpp.Lib;
typedef A = { hoge:Int }
typedef B = { piyo:Int }
typedef C = { > A, > B, }
class Main {
@uduki
uduki / expectation.hs
Created June 11, 2014 08:00
とある事の期待値の計算
{-# LANGUAGE ViewPatterns #-}
import Control.Applicative
import Data.List (find, genericIndex)
fixExpectation :: (Double, Integer) -> (Double, Integer) -> Integer -> Double
fixExpectation (sprob, sv) (fprob, fv) p = go 0 0
where
patterns = let f m n = (fac <!!> m) `div` ( (fac <!!> n) * (fac <!!> (m-n)) ) in map (fromIntegral . f p) [0..p]
go m i | i <= p = let m' = m + fromIntegral (sv * i + fv * (p-i)) * sprob^i * fprob^(p-i) * (patterns <!!> i) in go m' (i+1)
@uduki
uduki / echo-server_network-conduit.hs
Created March 6, 2013 13:07
echo server (network-conduit)
{-# LANGUAGE OverloadedStrings #-}
import Data.Conduit
import Data.Conduit.Network
main :: IO ()
main = runTCPServer (serverSettings 3001 "127.0.0.1") echo
echo :: Application IO
echo app = appSource app $$ appSink app
@uduki
uduki / qtquick-memo.txt
Created November 21, 2012 04:20
QtQuick Memo
QtQuickViewでQMLを表示する。
C++のデータをQMLに渡す時は、QmlContext::setPropertyHogeHogeで渡す。
C++で作成したQAbstractItemModelの派生クラスの各要素のデータは、そのままだとQMLからプロパティ名でアクセスできない。
これをプロパティ名でアクセス可能にするため、QAbstractItemModel::roleNamesをオーバーライドしてプロパティ名の設定をする。
QtQuick(QML/js)でViewの動作はかなりの部分が定義できるので、Haskellは低レイヤーの作業に専念出来る。
C++関数やC++タイプのQMLへのエクスポート等は、テキストエディタのサンプル及び解説ページを参照。
@uduki
uduki / how_to_use_DX_on_haskell.txt
Created November 10, 2012 03:00
HaskellからDXライブラリを使う方法(C#用パッケージ内のDLLを使用)
[ HaskellからDXライブラリを使う ]
1, まず本家からC#用パッケージをダウンロードしてくる。
http://homepage2.nifty.com/natupaji/DxLib/dxdload.html
2, (1)でダウンロードしたzipから、DxLib.dllとDxDLL.hだけ抜き取ってくる。
DxLib.dllは実行時に使う為。
DxDLL.hはDLL内の関数の宣言内容を人間が把握する為。
3, Haskellのソースコードを書く。DxDLL.hを参照しながら以下のコードを書く(test.hs)。
コード例:
@uduki
uduki / corecursion.hs
Created November 7, 2012 08:49
余再帰あれこれ
{--- 余再帰とその利用例 ---}
{- 末尾再帰と再帰と余再帰
-
- 参考: http://d.hatena.ne.jp/kazu-yamamoto/20091122/1258899591
-
- 末尾再帰 : 引数に結果を蓄積し、自身へgotoして処理の流れが戻ってこないようにする。正格なデータを処理する時に用いるとスタックやヒープの節約になる。
- foldl f a [] = a
- foldl f a (x:xs) = foldl f (f a x) xs
-
@uduki
uduki / monad-ctrl.hs
Created October 26, 2012 08:17
how to use monad-control
{-# LANGUAGE FlexibleContexts, FlexibleInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, TypeFamilies, UndecidableInstances #-}
import Control.Applicative
import Control.Exception.Lifted
import Control.Monad
import Control.Monad.Base
import Control.Monad.Trans
import Control.Monad.Trans.Control
import Control.Monad.Trans.Maybe
import qualified Data.Text as T
@uduki
uduki / freemonad.hs
Created October 10, 2012 09:37
How to use Free Monad
{-# LANGUAGE DeriveFunctor, FlexibleInstances, FlexibleContexts #-}
import Control.Monad.Trans
import Control.Monad.Trans.Maybe
import Control.Monad.State
import qualified Control.Monad.Free as F
import qualified Data.Foldable as DF
import Prelude hiding (head,last)
{-
@uduki
uduki / enc_detect.hs
Created July 9, 2012 11:21
文字コード自動判別付き変換(any -> Unicode)
import qualified Data.ByteString as BS
import qualified Data.Text as T
import qualified Data.Text.IO as TIO
import Data.Text.ICU.Convert
toUnicodeWithDetect :: FilePath -> IO T.Text
toUnicodeWithDetect fp = do
a <- BS.readFile fp
cons <- mapM (flip open Nothing) ns
let xs = take 1 $ filter (T.all (`notElem` errs)) $ map (flip toUnicode a) cons
@uduki
uduki / dl.hs
Created March 20, 2012 19:20
いかにしておっぱい画像をダウンロードするか〜2012 Haskell
{-# LANGUAGE OverloadedStrings, PatternGuards #-}
import qualified Codec.Binary.Url as CBU
import qualified Control.Concurrent as CC
import qualified Control.Concurrent.STM as STM
import qualified Control.Exception as CE
import qualified Control.Monad as CM
import qualified Control.Monad.Trans as CMT
import qualified Data.Aeson as A
import qualified Data.Attoparsec as DA