simplepoly

package
v0.0.0-...-48fa796 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 10, 2021 License: GPL-3.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DirectInterface specifies whether we should use the direct function
	// API or not. If we don't use it, then these simple functions are
	// wrapped with the struct below.
	DirectInterface = false // XXX: fix any bugs and set to true!
)

Variables

View Source
var RegisteredFuncs = make(map[string][]*types.FuncValue) // must initialize

RegisteredFuncs maps a function name to the corresponding static, pure funcs.

Functions

func ModuleRegister

func ModuleRegister(module, name string, fns []*types.FuncValue)

ModuleRegister is exactly like Register, except that it registers within a named module. This is a helper function.

func Register

func Register(name string, fns []*types.FuncValue)

Register registers a simple, static, pure, polymorphic function. It is easier to use than the raw function API, but also limits you to small, finite numbers of different polymorphic type signatures per function name. You can also register functions which return types containing variants, if you want automatic matching based on partial types as well. Some complex patterns are not possible with this API. Implementing a function like `printf` would not be possible. Implementing a function which counts the number of elements in a list would be.

Types

type WrappedFunc

type WrappedFunc struct {
	Fns []*types.FuncValue // list of possible functions
	// contains filtered or unexported fields
}

WrappedFunc is a scaffolding function struct which fulfills the boiler-plate for the function API, but that can run a very simple, static, pure, polymorphic function.

func (*WrappedFunc) ArgGen

func (obj *WrappedFunc) ArgGen(index int) (string, error)

ArgGen returns the Nth arg name for this function.

func (*WrappedFunc) Build

func (obj *WrappedFunc) Build(typ *types.Type) error

Build is run to turn the polymorphic, undetermined function, into the specific statically typed version. It is usually run after Unify completes, and must be run before Info() and any of the other Func interface methods are used.

func (*WrappedFunc) Close

func (obj *WrappedFunc) Close() error

Close runs some shutdown code for this function and turns off the stream.

func (*WrappedFunc) Info

func (obj *WrappedFunc) Info() *interfaces.Info

Info returns some static info about itself.

func (*WrappedFunc) Init

func (obj *WrappedFunc) Init(init *interfaces.Init) error

Init runs some startup code for this function.

func (*WrappedFunc) Polymorphisms

func (obj *WrappedFunc) Polymorphisms(partialType *types.Type, partialValues []types.Value) ([]*types.Type, error)

Polymorphisms returns the list of possible function signatures available for this static polymorphic function. It relies on type and value hints to limit the number of returned possibilities.

func (*WrappedFunc) Stream

func (obj *WrappedFunc) Stream() error

Stream returns the changing values that this func has over time.

func (*WrappedFunc) Validate

func (obj *WrappedFunc) Validate() error

Validate makes sure we've built our struct properly. It is usually unused for normal functions that users can use directly.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL