Your SlideShare is downloading. ×
0
mbed ではじめる組み込み Haskell
プログラミング
mbed ではじめる組み込み Haskell
プログラミング
mbed ではじめる組み込み Haskell
プログラミング
mbed ではじめる組み込み Haskell
プログラミン...
わたしはだれ?わたしはだれ?わたしはだれ?わたしはだれ?わたしはだれ?
☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q☆ Twit...
今日はHaskellよりmbedに焦点今日はHaskellよりmbedに焦点今日はHaskellよりmbedに焦点今日はHaskellよりmbedに焦点今日はHaskellよりmbedに焦点
☆ 一昨日OSC Hokkaidoが開催されました☆...
おしながきおしながきおしながきおしながきおしながき
☆ [1] Haskell言語とは☆ [1] Haskell言語とは☆ [1] Haskell言語とは☆ [1] Haskell言語とは☆ [1] Haskell言語とは
☆ [2] mbed...
[1] Haskell言語とは[1] Haskell言語とは[1] Haskell言語とは[1] Haskell言語とは[1] Haskell言語とは
☆ 強い型を使えるプログラミング言語☆ 強い型を使えるプログラミング言語☆ 強い型を使えるプ...
なんでまたHaskell組み込み?なんでまたHaskell組み込み?なんでまたHaskell組み込み?なんでまたHaskell組み込み?なんでまたHaskell組み込み?
☆ アプリでエラー → SEGV → 再起動できる☆ アプリでエラー →...
このプレゼンで前提とする環境このプレゼンで前提とする環境このプレゼンで前提とする環境このプレゼンで前提とする環境このプレゼンで前提とする環境
☆ Debian GNU/Linux sid amd64☆ Debian GNU/Linux sid ...
[2] mbedにおけるHaskell開発環境[2] mbedにおけるHaskell開発環境[2] mbedにおけるHaskell開発環境[2] mbedにおけるHaskell開発環境[2] mbedにおけるHaskell開発環境
詳細: ht...
ファームウェア書き込みファームウェア書き込みファームウェア書き込みファームウェア書き込みファームウェア書き込み
http://mbed.org/blog/entry/Debugging-from-GDB-using-pyOCD/
https:/...
クラウドコンパイラは使えないの?クラウドコンパイラは使えないの?クラウドコンパイラは使えないの?クラウドコンパイラは使えないの?クラウドコンパイラは使えないの?
いくつか課題があって実現していませんいくつか課題があって実現していませんいくつか課...
妄想: クラウドコンパイラ+Ajhc妄想: クラウドコンパイラ+Ajhc妄想: クラウドコンパイラ+Ajhc妄想: クラウドコンパイラ+Ajhc妄想: クラウドコンパイラ+Ajhc
mbed.org側修正が必要になってしまいます...mbed....
[3] mbed+Haskellデモ[3] mbed+Haskellデモ[3] mbed+Haskellデモ[3] mbed+Haskellデモ[3] mbed+Haskellデモ
☆ mbedでRSSリーダーを作ってみました☆ mbedでRS...
[4] デモの実装概要[4] デモの実装概要[4] デモの実装概要[4] デモの実装概要[4] デモの実装概要
[5] デモの実装詳細[5] デモの実装詳細[5] デモの実装詳細[5] デモの実装詳細[5] デモの実装詳細
ソースコードはこちらソースコードはこちらソースコードはこちらソースコードはこちらソースコードはこちら
https://github....
Haskell→C言語 呼び出しHaskell→C言語 呼び出しHaskell→C言語 呼び出しHaskell→C言語 呼び出しHaskell→C言語 呼び出し
foreign import ccall "c_extern.h wait_us"...
C言語の構造体を型として扱うC言語の構造体を型として扱うC言語の構造体を型として扱うC言語の構造体を型として扱うC言語の構造体を型として扱う
newtype {-# CTYPE "gpio_t" #-} GpioT = GpioT ()
for...
C言語ヘッダのアドレス設定を参照C言語ヘッダのアドレス設定を参照C言語ヘッダのアドレス設定を参照C言語ヘッダのアドレス設定を参照C言語ヘッダのアドレス設定を参照
foreign import primitive "const.LPC_GPIO0...
LEDのON/OFFLEDのON/OFFLEDのON/OFFLEDのON/OFFLEDのON/OFF
pinOutput :: Int
pinOutput = 1
initLed :: Int -> IO (Ptr GpioT)
initLed...
lwIPをHaskellでラップlwIPをHaskellでラップlwIPをHaskellでラップlwIPをHaskellでラップlwIPをHaskellでラップ
ストリーム処理ストリーム処理ストリーム処理ストリーム処理ストリーム処理
receiveAll :: Ptr TCPSocketConnectionT -> IO [String]
receiveAll tcp = unsafeInterleav...
えっと何がうれしいの?えっと何がうれしいの?えっと何がうれしいの?えっと何がうれしいの?えっと何がうれしいの?
main = do
ethernetInitDhcp
ethernetConnect 12000
ethernetGetIpAddr...
パケット読みとパーサを直結合パケット読みとパーサを直結合パケット読みとパーサを直結合パケット読みとパーサを直結合パケット読みとパーサを直結合
[6] これからの課題など[6] これからの課題など[6] これからの課題など[6] これからの課題など[6] これからの課題など
☆ mbedのAPIはC++☆ mbedのAPIはC++☆ mbedのAPIはC++☆ mbedのAPIはC++...
Metasepiメンバー紹介 #1Metasepiメンバー紹介 #1Metasepiメンバー紹介 #1Metasepiメンバー紹介 #1Metasepiメンバー紹介 #1
☆ @dec9ue さん☆ @dec9ue さん☆ @dec9ue さん...
Metasepiメンバー紹介 #2Metasepiメンバー紹介 #2Metasepiメンバー紹介 #2Metasepiメンバー紹介 #2Metasepiメンバー紹介 #2
☆ @mzp さん☆ @mzp さん☆ @mzp さん☆ @mzp さん...
同人誌にコンパイラの記事書きました同人誌にコンパイラの記事書きました同人誌にコンパイラの記事書きました同人誌にコンパイラの記事書きました同人誌にコンパイラの記事書きました
http://www.paraiso-lang.org/ikmsm/ht...
Upcoming SlideShare
Loading in...5
×

mbedではじめる組み込みHaskellプログラミング

2,488

Published on

mbed祭り in Sapporo

Published in: Technology

Transcript of "mbedではじめる組み込みHaskellプログラミング"

  1. 1. mbed ではじめる組み込み Haskell プログラミング mbed ではじめる組み込み Haskell プログラミング mbed ではじめる組み込み Haskell プログラミング mbed ではじめる組み込み Haskell プログラミング mbed ではじめる組み込み Haskell プログラミング Kiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu OkabeKiwamu Okabe
  2. 2. わたしはだれ?わたしはだれ?わたしはだれ?わたしはだれ?わたしはだれ? ☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q ☆ Metasepiプロジェクト主催☆ Metasepiプロジェクト主催☆ Metasepiプロジェクト主催☆ Metasepiプロジェクト主催☆ Metasepiプロジェクト主催 ☆ Ajhc Haskellコンパイラ開発者☆ Ajhc Haskellコンパイラ開発者☆ Ajhc Haskellコンパイラ開発者☆ Ajhc Haskellコンパイラ開発者☆ Ajhc Haskellコンパイラ開発者 ☆ Debian Maintainer☆ Debian Maintainer☆ Debian Maintainer☆ Debian Maintainer☆ Debian Maintainer ☆ 参照透明な海を守る会会員☆ 参照透明な海を守る会会員☆ 参照透明な海を守る会会員☆ 参照透明な海を守る会会員☆ 参照透明な海を守る会会員 ☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました☆ 前はデジタルサイネージの開発してました ☆ その昔はコピー機のOSをNetBSDで☆ その昔はコピー機のOSをNetBSDで☆ その昔はコピー機のOSをNetBSDで☆ その昔はコピー機のOSをNetBSDで☆ その昔はコピー機のOSをNetBSDで
  3. 3. 今日はHaskellよりmbedに焦点今日はHaskellよりmbedに焦点今日はHaskellよりmbedに焦点今日はHaskellよりmbedに焦点今日はHaskellよりmbedに焦点 ☆ 一昨日OSC Hokkaidoが開催されました☆ 一昨日OSC Hokkaidoが開催されました☆ 一昨日OSC Hokkaidoが開催されました☆ 一昨日OSC Hokkaidoが開催されました☆ 一昨日OSC Hokkaidoが開催されました ☆ Haskellの話はその時の資料をどうぞ!☆ Haskellの話はその時の資料をどうぞ!☆ Haskellの話はその時の資料をどうぞ!☆ Haskellの話はその時の資料をどうぞ!☆ Haskellの話はその時の資料をどうぞ! http://bit.ly/mbedhaskhttp://bit.ly/mbedhaskhttp://bit.ly/mbedhaskhttp://bit.ly/mbedhaskhttp://bit.ly/mbedhask ☆ 今日はmbed側の話をさせてください☆ 今日はmbed側の話をさせてください☆ 今日はmbed側の話をさせてください☆ 今日はmbed側の話をさせてください☆ 今日はmbed側の話をさせてください
  4. 4. おしながきおしながきおしながきおしながきおしながき ☆ [1] Haskell言語とは☆ [1] Haskell言語とは☆ [1] Haskell言語とは☆ [1] Haskell言語とは☆ [1] Haskell言語とは ☆ [2] mbedにおけるHaskell開発環境☆ [2] mbedにおけるHaskell開発環境☆ [2] mbedにおけるHaskell開発環境☆ [2] mbedにおけるHaskell開発環境☆ [2] mbedにおけるHaskell開発環境 ☆ [3] mbed+Haskellデモ☆ [3] mbed+Haskellデモ☆ [3] mbed+Haskellデモ☆ [3] mbed+Haskellデモ☆ [3] mbed+Haskellデモ ☆ [4] デモの実装概要☆ [4] デモの実装概要☆ [4] デモの実装概要☆ [4] デモの実装概要☆ [4] デモの実装概要 ☆ [5] デモの実装詳細☆ [5] デモの実装詳細☆ [5] デモの実装詳細☆ [5] デモの実装詳細☆ [5] デモの実装詳細 ☆ [6] これからの課題など☆ [6] これからの課題など☆ [6] これからの課題など☆ [6] これからの課題など☆ [6] これからの課題など
  5. 5. [1] Haskell言語とは[1] Haskell言語とは[1] Haskell言語とは[1] Haskell言語とは[1] Haskell言語とは ☆ 強い型を使えるプログラミング言語☆ 強い型を使えるプログラミング言語☆ 強い型を使えるプログラミング言語☆ 強い型を使えるプログラミング言語☆ 強い型を使えるプログラミング言語 ☆ コンパイルエラー↑ / 実行時エラー↓☆ コンパイルエラー↑ / 実行時エラー↓☆ コンパイルエラー↑ / 実行時エラー↓☆ コンパイルエラー↑ / 実行時エラー↓☆ コンパイルエラー↑ / 実行時エラー↓ 参考:「数理科学的バグ撲滅方法論のすすめ」 http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/ 参考:「数理科学的バグ撲滅方法論のすすめ」 http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/ 参考:「数理科学的バグ撲滅方法論のすすめ」 http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/ 参考:「数理科学的バグ撲滅方法論のすすめ」 http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/ 参考:「数理科学的バグ撲滅方法論のすすめ」 http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248230/
  6. 6. なんでまたHaskell組み込み?なんでまたHaskell組み込み?なんでまたHaskell組み込み?なんでまたHaskell組み込み?なんでまたHaskell組み込み? ☆ アプリでエラー → SEGV → 再起動できる☆ アプリでエラー → SEGV → 再起動できる☆ アプリでエラー → SEGV → 再起動できる☆ アプリでエラー → SEGV → 再起動できる☆ アプリでエラー → SEGV → 再起動できる ☆ 低レイヤーでエラー → システム停止☆ 低レイヤーでエラー → システム停止☆ 低レイヤーでエラー → システム停止☆ 低レイヤーでエラー → システム停止☆ 低レイヤーでエラー → システム停止 ☆ 低レイヤーを強い型で安全に設計したい!☆ 低レイヤーを強い型で安全に設計したい!☆ 低レイヤーを強い型で安全に設計したい!☆ 低レイヤーを強い型で安全に設計したい!☆ 低レイヤーを強い型で安全に設計したい! ☆ Ajhc Haskellコンパイラを開発中☆ Ajhc Haskellコンパイラを開発中☆ Ajhc Haskellコンパイラを開発中☆ Ajhc Haskellコンパイラを開発中☆ Ajhc Haskellコンパイラを開発中 ☆ http://ajhc.metasepi.org/☆ http://ajhc.metasepi.org/☆ http://ajhc.metasepi.org/☆ http://ajhc.metasepi.org/☆ http://ajhc.metasepi.org/
  7. 7. このプレゼンで前提とする環境このプレゼンで前提とする環境このプレゼンで前提とする環境このプレゼンで前提とする環境このプレゼンで前提とする環境 ☆ Debian GNU/Linux sid amd64☆ Debian GNU/Linux sid amd64☆ Debian GNU/Linux sid amd64☆ Debian GNU/Linux sid amd64☆ Debian GNU/Linux sid amd64 ☆ 他のディストリでも大丈夫だと思います☆ 他のディストリでも大丈夫だと思います☆ 他のディストリでも大丈夫だと思います☆ 他のディストリでも大丈夫だと思います☆ 他のディストリでも大丈夫だと思います ☆ WindowsとMacもひょっとしたら同じ?☆ WindowsとMacもひょっとしたら同じ?☆ WindowsとMacもひょっとしたら同じ?☆ WindowsとMacもひょっとしたら同じ?☆ WindowsとMacもひょっとしたら同じ?
  8. 8. [2] mbedにおけるHaskell開発環境[2] mbedにおけるHaskell開発環境[2] mbedにおけるHaskell開発環境[2] mbedにおけるHaskell開発環境[2] mbedにおけるHaskell開発環境 詳細: http://bit.ly/mbedhask詳細: http://bit.ly/mbedhask詳細: http://bit.ly/mbedhask詳細: http://bit.ly/mbedhask詳細: http://bit.ly/mbedhask
  9. 9. ファームウェア書き込みファームウェア書き込みファームウェア書き込みファームウェア書き込みファームウェア書き込み http://mbed.org/blog/entry/Debugging-from-GDB-using-pyOCD/ https://github.com/mbedmicro/mbed/tree/master/workspace_tools/ debugger http://mbed.org/blog/entry/Debugging-from-GDB-using-pyOCD/ https://github.com/mbedmicro/mbed/tree/master/workspace_tools/ debugger http://mbed.org/blog/entry/Debugging-from-GDB-using-pyOCD/ https://github.com/mbedmicro/mbed/tree/master/workspace_tools/ debugger http://mbed.org/blog/entry/Debugging-from-GDB-using-pyOCD/ https://github.com/mbedmicro/mbed/tree/master/workspace_tools/ debugger http://mbed.org/blog/entry/Debugging-from-GDB-using-pyOCD/ https://github.com/mbedmicro/mbed/tree/master/workspace_tools/ debugger ぼくは"make gdbwrite"一発でビルド+ファー ム書込ができるように設定しています ぼくは"make gdbwrite"一発でビルド+ファー ム書込ができるように設定しています ぼくは"make gdbwrite"一発でビルド+ファー ム書込ができるように設定しています ぼくは"make gdbwrite"一発でビルド+ファー ム書込ができるように設定しています ぼくは"make gdbwrite"一発でビルド+ファー ム書込ができるように設定しています
  10. 10. クラウドコンパイラは使えないの?クラウドコンパイラは使えないの?クラウドコンパイラは使えないの?クラウドコンパイラは使えないの?クラウドコンパイラは使えないの? いくつか課題があって実現していませんいくつか課題があって実現していませんいくつか課題があって実現していませんいくつか課題があって実現していませんいくつか課題があって実現していません ☆ AjhcコンパイラがGCCに依存している☆ AjhcコンパイラがGCCに依存している☆ AjhcコンパイラがGCCに依存している☆ AjhcコンパイラがGCCに依存している☆ AjhcコンパイラがGCCに依存している ☆ クラウドコンパイラがコマンドを呼べない☆ クラウドコンパイラがコマンドを呼べない☆ クラウドコンパイラがコマンドを呼べない☆ クラウドコンパイラがコマンドを呼べない☆ クラウドコンパイラがコマンドを呼べない
  11. 11. 妄想: クラウドコンパイラ+Ajhc妄想: クラウドコンパイラ+Ajhc妄想: クラウドコンパイラ+Ajhc妄想: クラウドコンパイラ+Ajhc妄想: クラウドコンパイラ+Ajhc mbed.org側修正が必要になってしまいます...mbed.org側修正が必要になってしまいます...mbed.org側修正が必要になってしまいます...mbed.org側修正が必要になってしまいます...mbed.org側修正が必要になってしまいます...
  12. 12. [3] mbed+Haskellデモ[3] mbed+Haskellデモ[3] mbed+Haskellデモ[3] mbed+Haskellデモ[3] mbed+Haskellデモ ☆ mbedでRSSリーダーを作ってみました☆ mbedでRSSリーダーを作ってみました☆ mbedでRSSリーダーを作ってみました☆ mbedでRSSリーダーを作ってみました☆ mbedでRSSリーダーを作ってみました ☆ redditのRSSをLCDにヘッドライン表示☆ redditのRSSをLCDにヘッドライン表示☆ redditのRSSをLCDにヘッドライン表示☆ redditのRSSをLCDにヘッドライン表示☆ redditのRSSをLCDにヘッドライン表示 ☆ 動画は以下のURLから観れます☆ 動画は以下のURLから観れます☆ 動画は以下のURLから観れます☆ 動画は以下のURLから観れます☆ 動画は以下のURLから観れます http://bit.ly/mbedmovhttp://bit.ly/mbedmovhttp://bit.ly/mbedmovhttp://bit.ly/mbedmovhttp://bit.ly/mbedmov
  13. 13. [4] デモの実装概要[4] デモの実装概要[4] デモの実装概要[4] デモの実装概要[4] デモの実装概要
  14. 14. [5] デモの実装詳細[5] デモの実装詳細[5] デモの実装詳細[5] デモの実装詳細[5] デモの実装詳細 ソースコードはこちらソースコードはこちらソースコードはこちらソースコードはこちらソースコードはこちら https://github.com/ajhc/demo-cortex-m3/tree/master/mbed-nxp- lpc1768/samples/Haskell_Http https://github.com/ajhc/demo-cortex-m3/tree/master/mbed-nxp- lpc1768/samples/Haskell_Http https://github.com/ajhc/demo-cortex-m3/tree/master/mbed-nxp- lpc1768/samples/Haskell_Http https://github.com/ajhc/demo-cortex-m3/tree/master/mbed-nxp- lpc1768/samples/Haskell_Http https://github.com/ajhc/demo-cortex-m3/tree/master/mbed-nxp- lpc1768/samples/Haskell_Http
  15. 15. Haskell→C言語 呼び出しHaskell→C言語 呼び出しHaskell→C言語 呼び出しHaskell→C言語 呼び出しHaskell→C言語 呼び出し foreign import ccall "c_extern.h wait_us" delayUs :: Int -> IO ()foreign import ccall "c_extern.h wait_us" delayUs :: Int -> IO ()foreign import ccall "c_extern.h wait_us" delayUs :: Int -> IO ()foreign import ccall "c_extern.h wait_us" delayUs :: Int -> IO ()foreign import ccall "c_extern.h wait_us" delayUs :: Int -> IO ()
  16. 16. C言語の構造体を型として扱うC言語の構造体を型として扱うC言語の構造体を型として扱うC言語の構造体を型として扱うC言語の構造体を型として扱う newtype {-# CTYPE "gpio_t" #-} GpioT = GpioT () foreign import primitive "const.sizeof(gpio_t)" gpio_t_size :: Int foreign import ccall "c_extern.h gpio_init" c_gpio_init :: Ptr GpioT -> Int -> Int -> IO () gpioInit :: Int -> Int -> IO (Ptr GpioT) gpioInit name direction = do tag <- mallocBytes gpio_t_size c_gpio_init tag name direction return tag newtype {-# CTYPE "gpio_t" #-} GpioT = GpioT () foreign import primitive "const.sizeof(gpio_t)" gpio_t_size :: Int foreign import ccall "c_extern.h gpio_init" c_gpio_init :: Ptr GpioT -> Int -> Int -> IO () gpioInit :: Int -> Int -> IO (Ptr GpioT) gpioInit name direction = do tag <- mallocBytes gpio_t_size c_gpio_init tag name direction return tag newtype {-# CTYPE "gpio_t" #-} GpioT = GpioT () foreign import primitive "const.sizeof(gpio_t)" gpio_t_size :: Int foreign import ccall "c_extern.h gpio_init" c_gpio_init :: Ptr GpioT -> Int -> Int -> IO () gpioInit :: Int -> Int -> IO (Ptr GpioT) gpioInit name direction = do tag <- mallocBytes gpio_t_size c_gpio_init tag name direction return tag newtype {-# CTYPE "gpio_t" #-} GpioT = GpioT () foreign import primitive "const.sizeof(gpio_t)" gpio_t_size :: Int foreign import ccall "c_extern.h gpio_init" c_gpio_init :: Ptr GpioT -> Int -> Int -> IO () gpioInit :: Int -> Int -> IO (Ptr GpioT) gpioInit name direction = do tag <- mallocBytes gpio_t_size c_gpio_init tag name direction return tag newtype {-# CTYPE "gpio_t" #-} GpioT = GpioT () foreign import primitive "const.sizeof(gpio_t)" gpio_t_size :: Int foreign import ccall "c_extern.h gpio_init" c_gpio_init :: Ptr GpioT -> Int -> Int -> IO () gpioInit :: Int -> Int -> IO (Ptr GpioT) gpioInit name direction = do tag <- mallocBytes gpio_t_size c_gpio_init tag name direction return tag
  17. 17. C言語ヘッダのアドレス設定を参照C言語ヘッダのアドレス設定を参照C言語ヘッダのアドレス設定を参照C言語ヘッダのアドレス設定を参照C言語ヘッダのアドレス設定を参照 foreign import primitive "const.LPC_GPIO0_BASE" addr_LPC_GPIO0_BASE :: Int pinName :: Int -> Int -> Int pinName major minor = addr_LPC_GPIO0_BASE + major * 32 + minor led1 :: Int led1 = pinName 1 18 -- P1.18 foreign import primitive "const.LPC_GPIO0_BASE" addr_LPC_GPIO0_BASE :: Int pinName :: Int -> Int -> Int pinName major minor = addr_LPC_GPIO0_BASE + major * 32 + minor led1 :: Int led1 = pinName 1 18 -- P1.18 foreign import primitive "const.LPC_GPIO0_BASE" addr_LPC_GPIO0_BASE :: Int pinName :: Int -> Int -> Int pinName major minor = addr_LPC_GPIO0_BASE + major * 32 + minor led1 :: Int led1 = pinName 1 18 -- P1.18 foreign import primitive "const.LPC_GPIO0_BASE" addr_LPC_GPIO0_BASE :: Int pinName :: Int -> Int -> Int pinName major minor = addr_LPC_GPIO0_BASE + major * 32 + minor led1 :: Int led1 = pinName 1 18 -- P1.18 foreign import primitive "const.LPC_GPIO0_BASE" addr_LPC_GPIO0_BASE :: Int pinName :: Int -> Int -> Int pinName major minor = addr_LPC_GPIO0_BASE + major * 32 + minor led1 :: Int led1 = pinName 1 18 -- P1.18
  18. 18. LEDのON/OFFLEDのON/OFFLEDのON/OFFLEDのON/OFFLEDのON/OFF pinOutput :: Int pinOutput = 1 initLed :: Int -> IO (Ptr GpioT) initLed name = gpioInit name pinOutput ledOn, ledOff :: Ptr GpioT -> IO () ledOn l = gpioWrite l 1 ledOff l = gpioWrite l 0 pinOutput :: Int pinOutput = 1 initLed :: Int -> IO (Ptr GpioT) initLed name = gpioInit name pinOutput ledOn, ledOff :: Ptr GpioT -> IO () ledOn l = gpioWrite l 1 ledOff l = gpioWrite l 0 pinOutput :: Int pinOutput = 1 initLed :: Int -> IO (Ptr GpioT) initLed name = gpioInit name pinOutput ledOn, ledOff :: Ptr GpioT -> IO () ledOn l = gpioWrite l 1 ledOff l = gpioWrite l 0 pinOutput :: Int pinOutput = 1 initLed :: Int -> IO (Ptr GpioT) initLed name = gpioInit name pinOutput ledOn, ledOff :: Ptr GpioT -> IO () ledOn l = gpioWrite l 1 ledOff l = gpioWrite l 0 pinOutput :: Int pinOutput = 1 initLed :: Int -> IO (Ptr GpioT) initLed name = gpioInit name pinOutput ledOn, ledOff :: Ptr GpioT -> IO () ledOn l = gpioWrite l 1 ledOff l = gpioWrite l 0
  19. 19. lwIPをHaskellでラップlwIPをHaskellでラップlwIPをHaskellでラップlwIPをHaskellでラップlwIPをHaskellでラップ
  20. 20. ストリーム処理ストリーム処理ストリーム処理ストリーム処理ストリーム処理 receiveAll :: Ptr TCPSocketConnectionT -> IO [String] receiveAll tcp = unsafeInterleaveIO receiveAll' where receiveAll' = do s <- tcpSocketConnection_receive tcp if s == "" then return [] else do s' <- unsafeInterleaveIO receiveAll' return $ s:s' receiveAll :: Ptr TCPSocketConnectionT -> IO [String] receiveAll tcp = unsafeInterleaveIO receiveAll' where receiveAll' = do s <- tcpSocketConnection_receive tcp if s == "" then return [] else do s' <- unsafeInterleaveIO receiveAll' return $ s:s' receiveAll :: Ptr TCPSocketConnectionT -> IO [String] receiveAll tcp = unsafeInterleaveIO receiveAll' where receiveAll' = do s <- tcpSocketConnection_receive tcp if s == "" then return [] else do s' <- unsafeInterleaveIO receiveAll' return $ s:s' receiveAll :: Ptr TCPSocketConnectionT -> IO [String] receiveAll tcp = unsafeInterleaveIO receiveAll' where receiveAll' = do s <- tcpSocketConnection_receive tcp if s == "" then return [] else do s' <- unsafeInterleaveIO receiveAll' return $ s:s' receiveAll :: Ptr TCPSocketConnectionT -> IO [String] receiveAll tcp = unsafeInterleaveIO receiveAll' where receiveAll' = do s <- tcpSocketConnection_receive tcp if s == "" then return [] else do s' <- unsafeInterleaveIO receiveAll' return $ s:s'
  21. 21. えっと何がうれしいの?えっと何がうれしいの?えっと何がうれしいの?えっと何がうれしいの?えっと何がうれしいの? main = do ethernetInitDhcp ethernetConnect 12000 ethernetGetIpAddress tcp <- tcpSocketConnection_connect host 80 tcpSocketConnection_send_all tcp $ "GET /hoge.txt HTTP/1.0nn" r <- receiveAll tcp main = do ethernetInitDhcp ethernetConnect 12000 ethernetGetIpAddress tcp <- tcpSocketConnection_connect host 80 tcpSocketConnection_send_all tcp $ "GET /hoge.txt HTTP/1.0nn" r <- receiveAll tcp main = do ethernetInitDhcp ethernetConnect 12000 ethernetGetIpAddress tcp <- tcpSocketConnection_connect host 80 tcpSocketConnection_send_all tcp $ "GET /hoge.txt HTTP/1.0nn" r <- receiveAll tcp main = do ethernetInitDhcp ethernetConnect 12000 ethernetGetIpAddress tcp <- tcpSocketConnection_connect host 80 tcpSocketConnection_send_all tcp $ "GET /hoge.txt HTTP/1.0nn" r <- receiveAll tcp main = do ethernetInitDhcp ethernetConnect 12000 ethernetGetIpAddress tcp <- tcpSocketConnection_connect host 80 tcpSocketConnection_send_all tcp $ "GET /hoge.txt HTTP/1.0nn" r <- receiveAll tcp ☆ この時"r"には単なるリストが返ってくる☆ この時"r"には単なるリストが返ってくる☆ この時"r"には単なるリストが返ってくる☆ この時"r"には単なるリストが返ってくる☆ この時"r"には単なるリストが返ってくる ☆ このリストを単に読むと☆ このリストを単に読むと☆ このリストを単に読むと☆ このリストを単に読むと☆ このリストを単に読むと ☆ lwIPが自動的にパケットを読んでくれる!☆ lwIPが自動的にパケットを読んでくれる!☆ lwIPが自動的にパケットを読んでくれる!☆ lwIPが自動的にパケットを読んでくれる!☆ lwIPが自動的にパケットを読んでくれる! ☆ このリストをRSSパーサに直接突っ込める☆ このリストをRSSパーサに直接突っ込める☆ このリストをRSSパーサに直接突っ込める☆ このリストをRSSパーサに直接突っ込める☆ このリストをRSSパーサに直接突っ込める
  22. 22. パケット読みとパーサを直結合パケット読みとパーサを直結合パケット読みとパーサを直結合パケット読みとパーサを直結合パケット読みとパーサを直結合
  23. 23. [6] これからの課題など[6] これからの課題など[6] これからの課題など[6] これからの課題など[6] これからの課題など ☆ mbedのAPIはC++☆ mbedのAPIはC++☆ mbedのAPIはC++☆ mbedのAPIはC++☆ mbedのAPIはC++ ☆ Haskellから直接C++を呼べない☆ Haskellから直接C++を呼べない☆ Haskellから直接C++を呼べない☆ Haskellから直接C++を呼べない☆ Haskellから直接C++を呼べない ☆ 今はmbed APIをCで書き直したり (涙☆ 今はmbed APIをCで書き直したり (涙☆ 今はmbed APIをCで書き直したり (涙☆ 今はmbed APIをCで書き直したり (涙☆ 今はmbed APIをCで書き直したり (涙 ☆ 簡単にmbed APIをHaskellラップしたい☆ 簡単にmbed APIをHaskellラップしたい☆ 簡単にmbed APIをHaskellラップしたい☆ 簡単にmbed APIをHaskellラップしたい☆ 簡単にmbed APIをHaskellラップしたい ☆ クラウドコンパイラ使いたいなぁ...☆ クラウドコンパイラ使いたいなぁ...☆ クラウドコンパイラ使いたいなぁ...☆ クラウドコンパイラ使いたいなぁ...☆ クラウドコンパイラ使いたいなぁ...
  24. 24. Metasepiメンバー紹介 #1Metasepiメンバー紹介 #1Metasepiメンバー紹介 #1Metasepiメンバー紹介 #1Metasepiメンバー紹介 #1 ☆ @dec9ue さん☆ @dec9ue さん☆ @dec9ue さん☆ @dec9ue さん☆ @dec9ue さん ☆ jhcのGCを解析してくれました☆ jhcのGCを解析してくれました☆ jhcのGCを解析してくれました☆ jhcのGCを解析してくれました☆ jhcのGCを解析してくれました ☆ 組込対応はGCの改造が不可欠でした☆ 組込対応はGCの改造が不可欠でした☆ 組込対応はGCの改造が不可欠でした☆ 組込対応はGCの改造が不可欠でした☆ 組込対応はGCの改造が不可欠でした ☆ その他GC関連について相談にのってくれる☆ その他GC関連について相談にのってくれる☆ その他GC関連について相談にのってくれる☆ その他GC関連について相談にのってくれる☆ その他GC関連について相談にのってくれる ☆ 最近はHDL屋さんになって忙しそう...☆ 最近はHDL屋さんになって忙しそう...☆ 最近はHDL屋さんになって忙しそう...☆ 最近はHDL屋さんになって忙しそう...☆ 最近はHDL屋さんになって忙しそう...
  25. 25. Metasepiメンバー紹介 #2Metasepiメンバー紹介 #2Metasepiメンバー紹介 #2Metasepiメンバー紹介 #2Metasepiメンバー紹介 #2 ☆ @mzp さん☆ @mzp さん☆ @mzp さん☆ @mzp さん☆ @mzp さん ☆ なごやこわい☆ なごやこわい☆ なごやこわい☆ なごやこわい☆ なごやこわい ☆ 関数型言語や証明言語にとても強い☆ 関数型言語や証明言語にとても強い☆ 関数型言語や証明言語にとても強い☆ 関数型言語や証明言語にとても強い☆ 関数型言語や証明言語にとても強い ☆ Xen上で動くMini-OSをHaskell化中☆ Xen上で動くMini-OSをHaskell化中☆ Xen上で動くMini-OSをHaskell化中☆ Xen上で動くMini-OSをHaskell化中☆ Xen上で動くMini-OSをHaskell化中 ☆ github.com/mzp/mini-os-with-ajhc☆ github.com/mzp/mini-os-with-ajhc☆ github.com/mzp/mini-os-with-ajhc☆ github.com/mzp/mini-os-with-ajhc☆ github.com/mzp/mini-os-with-ajhc ☆ Ajhcの不具合にさくっとpatchをくれたり☆ Ajhcの不具合にさくっとpatchをくれたり☆ Ajhcの不具合にさくっとpatchをくれたり☆ Ajhcの不具合にさくっとpatchをくれたり☆ Ajhcの不具合にさくっとpatchをくれたり
  26. 26. 同人誌にコンパイラの記事書きました同人誌にコンパイラの記事書きました同人誌にコンパイラの記事書きました同人誌にコンパイラの記事書きました同人誌にコンパイラの記事書きました http://www.paraiso-lang.org/ikmsm/http://www.paraiso-lang.org/ikmsm/http://www.paraiso-lang.org/ikmsm/http://www.paraiso-lang.org/ikmsm/http://www.paraiso-lang.org/ikmsm/ ☆ Lensライブラリの解説☆ Lensライブラリの解説☆ Lensライブラリの解説☆ Lensライブラリの解説☆ Lensライブラリの解説 ☆ パーサの解説☆ パーサの解説☆ パーサの解説☆ パーサの解説☆ パーサの解説 ☆ 圏論とモナド☆ 圏論とモナド☆ 圏論とモナド☆ 圏論とモナド☆ 圏論とモナド ☆ 囲碁AI☆ 囲碁AI☆ 囲碁AI☆ 囲碁AI☆ 囲碁AI ☆ Ajhcコンパイラの開発秘話 <= コレ書いた☆ Ajhcコンパイラの開発秘話 <= コレ書いた☆ Ajhcコンパイラの開発秘話 <= コレ書いた☆ Ajhcコンパイラの開発秘話 <= コレ書いた☆ Ajhcコンパイラの開発秘話 <= コレ書いた 立ち読み/購入したい方は声かけてください!立ち読み/購入したい方は声かけてください!立ち読み/購入したい方は声かけてください!立ち読み/購入したい方は声かけてください!立ち読み/購入したい方は声かけてください!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×