Skip to content

dhall-lang/dhall-nethack

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 

dhall-nethack

This repository illustrates best practices for the Dhall configuration language using the NetHack configuration format as an example use case. You can use this repository :

  • as a template for organizing your own large Dhall projects
  • as a case study for adapting Dhall to large and complex configuration formats

Note: this repository covers the non-platform-specific NetHack options, omits redundant options (such as female, which is superseded by gender), and also omits underspecified options (such as herecmd_menu).

Quick start

-- ./example.dhall

let types = ./types.dhall

let toNetHack = ./toNetHack.dhall

let config =
      types.Config::{
      , name = Some "Kaeru"
      , role = Some { enable = True, value = types.Role.wizard }
      , align = Some { enable = True, value = types.Alignment.chaotic }
      , race = Some { enable = True, value = types.Race.elf }
      , gender = Some types.Gender.female
      , pettype = Some types.PetType.cat
      , catname = Some "Imoen"
      , fruit = Some "apple pie"
      , autopickup = Some False
      , disclose =
          let secret = Some { default = False, prompt = False }

          in  Some
                { attributes = secret
                , conduct = secret
                , dungeon_overview = secret
                , inventory = secret
                , monsters_genocided = secret
                , monsters_killed = secret
                }
      }

in  toNetHack config
$ dhall text --file './example.dhall'
OPTIONS=align:chaotic
OPTIONS=!autopickup
OPTIONS=catname:Imoen
OPTIONS=disclose:-i -a -v -g -c -o
OPTIONS=fruit:apple pie
OPTIONS=gender:female
OPTIONS=name:Kaeru
OPTIONS=pettype:cat
OPTIONS=race:elf
OPTIONS=role:wizard

Exploring the project

You can begin to explore the project by browsing these files and their dependencies:

You can also use dhall repl to explore this project. Try these commands to get started:

$ dhall repl
 :let types = ./types.dhall  -- Import all types as a giant record
 types.Config                -- Display the `Config` type
 types.Scores                -- Display the `Scores` type

 :let render = ./render.dhall              -- Import all rendering functions
 render.Config types.Config.default        -- Render the default configuration
 render.Config ./examples/small.dhall      -- Render a small configuration
 render.Config ./examples/validated.dhall  -- Render a large configuration
 render.Config (types.Config::{ scores = types.Scores::{ top = Some 3 } })
 render.Scores (types.Scores::{ top = Some 3 })

 :type render.Scores  -- What is the type of the `render.Scores` function?
 render.Scores        -- What is the implementation of `render.Scores`?
 :type render.Config  -- What is the type of the `render.Config` function?
 render.Config        -- What is the implementation of `render.Config`?

About

Generate NetHack configurations using Dhall

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages