Skip to content

Commit

Permalink
Merge pull request #110 from MatthewFluet/basis-library-types
Browse files Browse the repository at this point in the history
Changes to type equalities and equality status in Basis Library.

* Hide type equality of mono and poly Word8.word arrays and vectors;
  fixes #45.
* Hide equality status of poly (and mono) vector and array slices;
  fixes #47.
  • Loading branch information
MatthewFluet committed Jun 11, 2015
2 parents f2d45f9 + 4da1e46 commit a7ed9cb
Show file tree
Hide file tree
Showing 10 changed files with 230 additions and 198 deletions.
15 changes: 8 additions & 7 deletions basis-library/arrays-and-vectors/mono-array.fun
@@ -1,4 +1,5 @@
(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh
(* Copyright (C) 2015 Matthew Fluet.
* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh
* Jagannathan, and Stephen Weeks.
* Copyright (C) 1997-2000 NEC Research Institute.
*
Expand All @@ -7,21 +8,21 @@
*)

functor MonoArray (type elem
structure V: MONO_VECTOR_EXTRA
structure MV: MONO_VECTOR_EXTRA
where type elem = elem
and type vector = elem Vector.vector
and type MonoVectorSlice.slice = elem VectorSlice.slice
): MONO_ARRAY_EXTRA
where type elem = elem
and type vector = V.vector
and type vector_slice = V.MonoVectorSlice.slice =
and type vector = MV.vector
and type vector_slice = MV.MonoVectorSlice.slice =
struct
open Array

type elem = V.elem
type elem = MV.elem
type array = elem array
type vector = V.vector
type vector_slice = V.MonoVectorSlice.slice
type vector = MV.vector
type vector_slice = MV.MonoVectorSlice.slice

val fromPoly = fn a => a
val toPoly = fn a => a
Expand Down
9 changes: 5 additions & 4 deletions basis-library/arrays-and-vectors/mono-array2.fun
@@ -1,4 +1,5 @@
(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh
(* Copyright (C) 2015 Matthew Fluet.
* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh
* Jagannathan, and Stephen Weeks.
* Copyright (C) 1997-2000 NEC Research Institute.
*
Expand All @@ -7,12 +8,12 @@
*)

functor MonoArray2 (type elem
structure V: MONO_VECTOR
structure MV: MONO_VECTOR
where type elem = elem
and type vector = elem Vector.vector): MONO_ARRAY2 =
struct
type elem = V.elem
type vector = V.vector
type elem = MV.elem
type vector = MV.vector
open Array2
type array = elem array
type region = {base: array,
Expand Down
30 changes: 15 additions & 15 deletions basis-library/arrays-and-vectors/mono-array2.sig
Expand Up @@ -13,21 +13,21 @@ signature MONO_ARRAY2 =

datatype traversal = datatype Array2.traversal

val array: int * int * elem -> array
val fromList: elem list list -> array
val tabulate: traversal -> int * int * (int * int -> elem) -> array
val sub: array * int * int -> elem
val update: array * int * int * elem -> unit
val dimensions: array -> int * int
val nCols: array -> int
val nRows: array -> int
val row: array * int -> vector
val column: array * int -> vector
val app: traversal -> (elem -> unit) -> array -> unit
val appi: traversal -> (int * int * elem -> unit) -> region -> unit
val array: int * int * elem -> array
val column: array * int -> vector
val copy: {src: region, dst: array, dst_row: int, dst_col: int} -> unit
val appi: traversal -> (int * int * elem -> unit) -> region -> unit
val app: traversal -> (elem -> unit) -> array -> unit
val foldi: traversal -> (int * int * elem * 'b -> 'b) -> 'b -> region -> 'b
val dimensions: array -> int * int
val fold: traversal -> (elem * 'b -> 'b) -> 'b -> array -> 'b
val modifyi: traversal -> (int * int * elem -> elem) -> region -> unit
val modify: traversal -> (elem -> elem) -> array -> unit
val foldi: traversal -> (int * int * elem * 'b -> 'b) -> 'b -> region -> 'b
val fromList: elem list list -> array
val modify: traversal -> (elem -> elem) -> array -> unit
val modifyi: traversal -> (int * int * elem -> elem) -> region -> unit
val nCols: array -> int
val nRows: array -> int
val row: array * int -> vector
val sub: array * int * int -> elem
val tabulate: traversal -> int * int * (int * int -> elem) -> array
val update: array * int * int * elem -> unit
end
4 changes: 2 additions & 2 deletions basis-library/arrays-and-vectors/mono-vector-slice.sig
Expand Up @@ -37,6 +37,7 @@ signature MONO_VECTOR_SLICE_EXTRA =
val dropl: (elem -> bool) -> slice -> slice
val dropr: (elem -> bool) -> slice -> slice
val fields: (elem -> bool) -> slice -> slice list
val fromPoly: elem VectorSlice.slice -> slice
val isPrefix: (elem * elem -> bool) -> vector -> slice -> bool
val isSubvector: (elem * elem -> bool) -> vector -> slice -> bool
val isSuffix: (elem * elem -> bool) -> vector -> slice -> bool
Expand All @@ -47,6 +48,7 @@ signature MONO_VECTOR_SLICE_EXTRA =
val takel: (elem -> bool) -> slice -> slice
val taker: (elem -> bool) -> slice -> slice
val toList: slice -> elem list
val toPoly: slice -> elem VectorSlice.slice
val tokens: (elem -> bool) -> slice -> slice list
val translate: (elem -> vector) -> slice -> vector
val triml: int -> slice -> slice
Expand All @@ -60,7 +62,5 @@ signature EQTYPE_MONO_VECTOR_SLICE_EXTRA =
sig
include MONO_VECTOR_SLICE_EXTRA

val fromPoly: elem VectorSlice.slice -> slice
val span: slice * slice -> slice
val toPoly: slice -> elem VectorSlice.slice
end
8 changes: 7 additions & 1 deletion basis-library/arrays-and-vectors/mono-vector.fun
@@ -1,4 +1,5 @@
(* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh
(* Copyright (C) 2015 Matthew Fluet.
* Copyright (C) 1999-2005 Henry Cejtin, Matthew Fluet, Suresh
* Jagannathan, and Stephen Weeks.
* Copyright (C) 1997-2000 NEC Research Institute.
*
Expand All @@ -13,12 +14,16 @@ functor MonoVector (type elem): MONO_VECTOR_EXTRA
type array = elem array
type elem = elem
type vector = elem vector
val fromPoly = fn v => v
val toPoly = fn v => v
structure MonoVectorSlice =
struct
open VectorSlice
type elem = elem
type vector = vector
type slice = elem slice
val fromPoly = fn s => s
val toPoly = fn s => s
end
end

Expand All @@ -29,6 +34,7 @@ functor EqtypeMonoVector (eqtype elem): EQTYPE_MONO_VECTOR_EXTRA
type array = elem array
type elem = elem
type vector = elem vector
type vector_eqtype = vector
val fromPoly = fn v => v
val toPoly = fn v => v
structure MonoVectorSlice =
Expand Down
18 changes: 9 additions & 9 deletions basis-library/arrays-and-vectors/mono-vector.sig
Expand Up @@ -25,32 +25,33 @@ signature MONO_VECTOR =
val update: vector * int * elem -> vector
end

signature MONO_VECTOR_EXTRA_PRE =
signature MONO_VECTOR_EXTRA_COMMON =
sig
include MONO_VECTOR

type array

val unsafeFromArray: array -> vector
val unsafeSub: vector * int -> elem

val append: vector * vector -> vector
val concatWith: vector -> vector list -> vector
val duplicate: vector -> vector
val fields: (elem -> bool) -> vector -> vector list
val fromPoly: elem Vector.vector -> vector
val isPrefix: (elem * elem -> bool) -> vector -> vector -> bool
val isSubvector: (elem * elem -> bool) -> vector -> vector -> bool
val isSuffix: (elem * elem -> bool) -> vector -> vector -> bool
val toList: vector -> elem list
val toPoly: vector -> elem Vector.vector
val tokens: (elem -> bool) -> vector -> vector list
val translate: (elem -> vector) -> vector -> vector
val unfoldi: int * 'a * (int * 'a -> elem * 'a) -> vector * 'a
val unsafeFromArray: array -> vector
val unsafeSub: vector * int -> elem
val vector: int * elem -> vector
end

signature MONO_VECTOR_EXTRA =
sig
include MONO_VECTOR_EXTRA_PRE
include MONO_VECTOR_EXTRA_COMMON

structure MonoVectorSlice: MONO_VECTOR_SLICE_EXTRA
where type elem = elem
Expand All @@ -59,12 +60,11 @@ signature MONO_VECTOR_EXTRA =

signature EQTYPE_MONO_VECTOR_EXTRA =
sig
include MONO_VECTOR_EXTRA_PRE
eqtype vector_eqtype
include MONO_VECTOR_EXTRA_COMMON
sharing type vector_eqtype = vector

structure MonoVectorSlice: EQTYPE_MONO_VECTOR_SLICE_EXTRA
where type elem = elem
and type vector = vector

val fromPoly: elem Vector.vector -> vector
val toPoly: vector -> elem Vector.vector
end

0 comments on commit a7ed9cb

Please sign in to comment.