All Projects → rinn7e → rinn7e-halogen-starter

rinn7e / rinn7e-halogen-starter

Licence: other
Opinionated Purescript Halogen Starter

Programming Languages

purescript
368 projects
Dhall
116 projects
HTML
75241 projects
javascript
184084 projects - #8 most used programming language

Opinionated Purescript Halogen Starter

Feature

  • Contain router system built-in
  • Default BigPrelude to contain shared module
  • Halogen HTML helper, Affjax(Http) Helper
  • Development command, Production command

Limitation

  • Not that good code convention (I am a still a noob purescript programmer)
  • Still need a lot of cleanup
  • Opinionated: I created this for my own project, but hopefully somebody will find this useful. You should build on top of this, or just use this as an example to get started. (Pull Request is welcomed)

Convention

  • Most common type and function should be put in BigPrelude, ex: Effect, Aff
  • Shared HTML is put in Shared.Layout, various helper function is put in Shared.Helper
  • Any custom data structure (Page, Todo, User) is put in Data dir
  • Shared component should be put in Shared dir, in a sub dir Component or Template or anyth you prefer
  • Individual Page is put in Page dir
  • Env var is put in config dir, we will pass it into compile using include, ex pscid -I lib:config/dev

Get Started

  • Pre-requisite
npm i -g purescript #main-compiler
npm i -g [email protected] #fast reload
npm i -g spago #manage package and build
npm i -g parcel-bundler #fast build tool for development
  • Clone and Install dependency
git clone [email protected]:rinn7e/rinn7e-halogen-starter.git && cd rinn7e-halogen-starter
spago install

Fast Development Loop

pscid # this will run `npm run build` or `spago build -p 'lib/**/*.purs' 'config/dev/**/*.purs'`

#click-b to build, then it will auto-reload when code changed, some changes required full build again, click-b to build again

# this will compile to commonjs in output dir, to actually see it in browser, we use parcel, see command below

in another terminal

parcel index.html #compile our output dir and serve in localhost:1234

Prepare for Production

spago bundle-module -p 'lib/**/*.purs' 'config/dev/**/*.purs' -t dist-prod/prod.js
# this will compile to optimize js, then we can <script> src it in prod index.html

Footer

យកព្រះអាទិត្យធ្វើដែក​កេស
ដុតជកដល់ថ្ងៃសៅរ៍

                                     
                                    . +~.                                       
                              .......?MN.,                                      
                    .  ..     .......,:::,...                                   
                    .  ..     .....,8D?ID$.,.          ..                       
                   .:8$..     ....,OM8O8ON$,......     +N+.                     
                ....I8O:...... .. .M8??IIDD:...........ODO,,    .               
                ...=8ZZN...... ...OMDZMM$8MN..........$7+$D....                 
                .,$D$M8D$........+DD$$$7$IDN?  ......?87ZINZ.,. .               
               ..~DM78Z$N+.......+M8I7?I7IZM$.......+DD$O$ZN:.... .             
               ..=M7I+?=ZZ......,OMI8MMMMDIMN.......Z8=+~+~8=. ...              
               .,MNZDD$D7M7.,...,DN+=======DN.. ...OMD7$D$$OD:....              
               .+NO$NDMN?M?.....IMMI8MMMMO=DMO.....?MIOMMM8+D+... .             
               .OMI~~===~D8.,...=DN77I7I?I7OM=. ..,8D+~~~:=+M$...               
              .~NM??MMMM?NMI....NMMZMMZ7MMZDMD,...+MM=7MMM8:NM:..               
        . .....,DN+~::::=DM....~NMMOD:ON:DODMN+,.,:DN+,:::~~M8........          
        .......IMM++D:7D,NMO.:=D=+~7:DMMD,$=?+N~..8M$,MO.8D~NMZ.......          
        .......I7~~I:8=$M:~~~~+N7:Z=$MMMMI+D=~N+===~=DD~N:O=:Z8.,... .          
        .....,.:~DM~?M8+=MN~::,$D~?:.I7$I,~D.NIII7DMM$=8M7+?NI=......           
        ....~$I7NMD:8.I8:D?N87$NO=+MOZOOZOM8:8MMMM8,N==Z:OI=NM$7$=....          
        ...8NOO8NNOMZZOZ8D,D=ZO$8.7N,8NMO,ND.D=:=,8.MZZOO$MN8MDDDM8...          
         ..8O~D.8N:N:DIZ?N:D+++Z8.:=.MMMN:~=.D=ZM,8.M+D~D,87ZD:Z7O8...          
         ..OO~Z,8N:D:N7OIN:8MNMMO.:+.MMMD:~:.8?~=~8.M=M:N,87ZN,$IOD...          
         ..ZMNDN8+.+:N7~:D:Z=.....?D,?++?.DD.?$77$O.M~~:N:?~~NNDDNO...          
       ..ZOZZZZ$Z88D8MDOZ8DNNDNNNNNM8DDD88MN8DD8DDDDDDD8MZDD8$$$$7$$ZZ          
        .M7777I777IZMMMMD7I7777777$MMMMMMMMZZ$$$$$$$Z8MMMMD$$$$$$Z$ZMM          
        .M~~~~:::~:?MMMMO::~::::::+MMMMMMMN+:~~::::::IMMMM$::::::::?MM          
       ..M=::::::::+MMMMO,,,,,,,,,~MMMMMMMM=,,,,,,,,,?MMMM7.......,?MM          
       ..MMMMMMMMMMMMMMM8=++++++++?MMMMMMMM+?+?++=?+=OMMMMMMMMMMMMMMMM          
                                                                       
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].