2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PureScript のフレームワーク Halogen をさわってみるゼ

Last updated at Posted at 2023-01-26

初めに

Haskell と Elm をさわっている人が PureScript をさわってみる記事です

以下のようなカウンターを作ります。

PureScript を動かす

以前作成した PureScript のリポジトリをもとに始めていきます。

以下の手順で取り敢えず PureScript 動かせます👏

$ git clone https://github.com/dsaikawa/purescript-initial purescript-halogen-test
...
$ cd purescript-halogen-test
$ npm install
...
$ npm run start
...
[info] Build succeeded.
🍝
$

いざ Halogen を使ってみる🥳

Halogen インストール

$ npx spago install halogen
...
$

/src/Main.purs を書き換える
Halogen Guide からのコピペです
よくあるカウンターのサンプルです

module Main where

import Prelude

import Effect (Effect)
import Halogen as H
import Halogen.Aff as HA
import Halogen.HTML as HH
import Halogen.HTML.Events as HE
import Halogen.VDom.Driver (runUI)

main :: Effect Unit
main = HA.runHalogenAff do
  body <- HA.awaitBody
  runUI component unit body

data Action = Increment | Decrement

component =
  H.mkComponent
    { initialState
    , render
    , eval: H.mkEval $ H.defaultEval { handleAction = handleAction }
    }
  where
  initialState _ = 0

  render state =
    HH.div_
      [ HH.button [ HE.onClick \_ -> Decrement ] [ HH.text "-" ]
      , HH.div_ [ HH.text $ show state ]
      , HH.button [ HE.onClick \_ -> Increment ] [ HH.text "+" ]
      ]

  handleAction = case _ of
    Increment -> H.modify_ \state -> state + 1
    Decrement -> H.modify_ \state -> state - 1

バンドルしていきます

$ npx spago bundle-app -y -t public/index.js
...
$

/public/index.html を作ります

<!DOCTYPE html>
<html>
  <head>
    <title>Halogen App</title>
    <script src="./index.js"></script>
  </head>
  <body></body>
</html>

開発の準備をする

  • live-server
  • npm-run-all

の2つを使ってホットリロードをさせて開発の環境を揃えていきます

まずはインストール

$ npm install live-server npm-run-all
...
$

package.json の script の部分を以下のように書き換えます

"scripts": {
    "start:script": "npx spago bundle-app -t ./public/index.js -w",
    "start:live-server": "npx live-server public",
    "start": "run-p start:*",
    "build": "spago build"
  }
$ npm start
...

でホットリロードが行えるので開発が楽になると思います!

最後に

実際に動かすことができました、次は Halogen を使って色々作っていきたいと思います😘

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?