Skip to main content

ReadNotIndex() (type)

Laurence MorganAbout 1 min

ReadNotIndex() (type)

Data type handler for the bang-prefixed index, ![, builtin


This is a function you would write when programming a Murex data-type.

It's called by the index, ![, builtin.

The purpose of this function is to allow builtins to support sequential reads (where possible) and also create a standard interface for ![ (index), thus allowing it to be data-type agnostic.


Registering your ReadNotIndex()

// To avoid data races, this should only happen inside func init()
lang.ReadNotIndexes[ /* your type name */ ] = /* your readIndex func */


Example ReadIndex() function (the code structure is the same for ReadIndex and ReadNotIndex):

package json

import (

func index(p *lang.Process, params []string) error {
	var jInterface interface{}

	b, err := p.Stdin.ReadAll()
	if err != nil {
		return err

	err = json.Unmarshal(b, &jInterface)
	if err != nil {
		return err

	marshaller := func(iface interface{}) ([]byte, error) {
		return json.Marshal(iface, p.Stdout.IsTTY())

	return lang.IndexTemplateObject(p, params, &jInterface, marshaller)


While there is support for a dedicated ReadNotIndex() for instances of ![, the template APIs lang.IndexTemplateObject and lang.IndexTemplateTable are both agnostic to the bang prefix.


  1. *lang.Process: Process's runtime state. Typically expressed as the variable p
  2. []string: slice of parameters used in ![

See Also

This document was generated from lang/stdio/interface_doc.yamlopen in new window.

Last update:
Contributors: Laurence Morgan,Laurence Morgan